Free NHibernate bidirectional many to one exception IConvertible

I am trying to match a one-to-one relationship between parents / children for the same class / table. Here is the mapping:

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

When I try to save a parent with a list of children, I get the following error:

System.InvalidCastException: The object must implement IConvertible.

The above mapping works if parent / children are two different classes / tables. I also tried making the display unidirectional by removing:

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

Then I can save, but if I get the child, the parent is null.

Any ideas how to solve this?


Fit.Server.Persistence.Test.Repositories.SagOpgave.SagOpgavePersistenceTest.Opgave_gets_references threw an exception:

System.InvalidCastException: The object must implement 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.qa(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() 

Found a solution that still works.

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

I tried to understand the code and the error. Based on this, I see that you transferred some data with an invalid data type or a mismatch in the column data type. Before saving, check all column values.

0
source

All Articles