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