2013-03-05 1 views
4

Я пытаюсь сопоставить взаимно однозначное отношение между родителями/дочерними элементами для одного и того же класса/таблицы. Вот отображение:Fluent 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"); 

Тогда я могу сохранить, но если я принесу ребенок родитель является недействительным.

Любые идеи, как это решить?


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

У вас есть трассировка стека для этого исключения? –

+0

Когда вы отправили эту трассировку стека, вас явно спросили, хотите ли вы опубликовать ответ на свой вопрос, и вам сказали, что вместо этого вы должны обновить свой вопрос, если хотите предоставить дополнительную информацию. Эти сообщения предназначены для чтения. Итак: обновите свой вопрос с помощью трассировки стека и удалите свой ответ. –

+0

Каково отображение идентификатора класса? – Firo

ответ

0

Я пробовал понять код и ошибку. Исходя из этого, я вижу, что вы передали некоторые данные с недопустимым типом данных или несоответствие типу данных столбца. Перед сохранением проверьте все значения столбцов.

 Смежные вопросы

  • Нет связанных вопросов^_^