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

person user1201991    schedule 05.03.2013    source источник
comment
У вас есть трассировка стека для этого исключения?   -  person Daniel Hilgarth    schedule 05.03.2013
comment
Когда вы опубликовали эту трассировку стека, вас прямо спросили, хотите ли вы опубликовать ответ на свой вопрос, и вам сказали, что вместо этого вам следует обновить свой вопрос, если вы хотите предоставить дополнительную информацию. Эти сообщения предназначены для чтения. Итак: обновите свой вопрос с помощью трассировки стека и удалите свой ответ без ответа.   -  person Daniel Hilgarth    schedule 05.03.2013
comment
что такое отображение идентификатора класса?   -  person Firo    schedule 13.03.2013


Ответы (1)


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

person Thanigainathan    schedule 09.05.2013