2013-03-05 56 views
4

我試圖映射同一類/表的父/子之間的biredictional多對一關係。 這裏是映射:流利NHibernate雙向多對一IConvertible異常

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

當我試圖挽救父母帶着孩子,我得到以下錯誤列表

System.InvalidCastException:對象必須實現IConvertible。

如果父/子是兩個不同的類/表,上面的映射工作。 我也試圖通過去除使映射單向:

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(); 
+2

您是否有該異常的堆棧跟蹤? – 2013-03-05 13:44:22

+0

當您發佈堆棧跟蹤時,您已明確詢問您是否要發佈問題答案,並且您被告知應該更新問題,而不是要提供其他信息。這些消息是爲了閱讀。所以:請用堆棧跟蹤更新您的問題並刪除您的不回答。 – 2013-03-05 14:06:44

+0

這個類的id映射是什麼? – Firo 2013-03-13 13:52:39

回答

0

我試着理解代碼和錯誤。基於此,我可以看到您已傳遞一些數據類型無效或與列數據類型不匹配的數據。保存前請檢查所有列值。