3

同じクラス/テーブルの親/子間の多対多の関係をマッピングしようとしています。マッピングは次のとおりです。

References(x => x.Parent).Column("ParentID");
HasMany(x => x.Children).KeyColumn("ParentID").Inverse().Cascade.All();

子のリストを使用して親を保存しようとすると、次のエラーが発生します

System.InvalidCastException:オブジェクトはIConvertibleを実装する必要があります。

上記のマッピングは、親/子が2つの異なるクラス/テーブルである場合に機能します。また、以下を削除して、マッピングを単方向にしようとしました。

References(x => x.Parent).Column("ParentID");

次に保存できますが、子をフェッチすると親はnullになります。

これを解決する方法はありますか?


Fit.Server.Persistence.Test.Repositories.SagOpgave.SagOpgavePersistenceTest.Opgave_gets_referencesが例外をスローしました:

System.InvalidCastException:オブジェクトはIConvertibleを実装する必要があります。

at System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider)
at System.Convert.ChangeType(Object value, Type conversionType)
at Pervasive.Data.SqlClient.PsqlParameter.a(Type A_0)
at Pervasive.Data.SqlClient.q.a(PsqlParameter A_0, k A_1, a3 A_2, Int32 A_3)
at Pervasive.Data.SqlClient.q..ctor(PsqlParameter A_0, k A_1, Int32 A_2, Int32 A_3, Int32 A_4)
at Pervasive.Data.SqlClient.PsqlParameterCollection.a(k A_0, Int32 A_1, Int32 A_2, Int32 A_3)
at Pervasive.Data.SqlClient.PsqlCommand.a(Boolean A_0, CommandBehavior A_1, Boolean A_2)
at Pervasive.Data.SqlClient.PsqlCommand.ExecuteNonQuery()
at NHibernate.AdoNet.AbstractBatcher.ExecuteNonQuery(IDbCommand cmd)
at NHibernate.AdoNet.NonBatchingBatcher.AddToBatch(IExpectation expectation)
at NHibernate.Persister.Entity.AbstractEntityPersister.Insert(Object id, Object[] fields, Boolean[] notNull, Int32 j, SqlCommandInfo sql, Object obj, ISessionImplementor session)
at NHibernate.Persister.Entity.AbstractEntityPersister.Insert(Object id, Object[] fields, Object obj, ISessionImplementor session)
at NHibernate.Action.EntityInsertAction.Execute()
at NHibernate.Engine.ActionQueue.Execute(IExecutable executable)
at NHibernate.Engine.ActionQueue.ExecuteActions(IList list)
at NHibernate.Engine.ActionQueue.ExecuteActions()
at NHibernate.Event.Default.AbstractFlushingEventListener.PerformExecutions(IEventSource session)
at NHibernate.Event.Default.DefaultFlushEventListener.OnFlush(FlushEvent event)
at NHibernate.Impl.SessionImpl.Flush()
at NHibernate.Transaction.AdoTransaction.Commit()

これまでに機能するソリューションを見つけました。

References(x => x.Parent).Column("ParentID").Not.Insert();
HasMany(x => x.Children).KeyColumn("ParentID").Cascade.All();
4

1 に答える 1

0

コードとエラーを理解しようとしました。それに基づいて、無効なデータ型または列のデータ型と一致しないデータを渡したことがわかります。保存する前にすべての列の値を確認してください。

于 2013-05-09T13:10:15.883 に答える