Jef*_*eff 6 nhibernate fluent-nhibernate
我正在尝试使用映射文件中的References映射FluentNHibernate中Person对象和Organization对象之间的父子关系,如下所示:
参考文献(x => x.Organization);
关系是Person对象,其中包含OrganizationId列,该列对应于Organization表中具有相应OrganizationId的记录.不同的人员记录可以属于同一个组织.
当我检索一个Person对象时,它可以正常工作.Person.Organization已填充.我可以保存一个Person对象,它可以正常工作.但是,当我尝试添加一个新的Person对象时,我从NHibernate获得了一个Index Out of Range异常.调用session.SaveOrUpdate(person)时发生异常.我已经尝试将映射更改为:
参考文献(x => x.Organization).Cascade.None()
仍然得到相同的错误.我无法弄清楚导致异常的原因.完整的例外是这样的:
System.IndexOutOfRangeException:此SqlParameterCollection的索引22无效,Count = 22.位于System.Data.SqlClient.SqlParameterCollection.RangeCheck(Int32索引)的System.Data.SqlClient.SqlParameterCollection.GetParameter(Int32索引),位于NHibernate的System.Data.Common.DbParameterCollection.System.Collections.IList.get_Item(Int32索引) NHibernate.Persister.Entity.AbstractEntityPersister的NHibernate.Type.ManyToOneType.NullSafeSet(IDbCommand st,Object value,Int32 index,Boolean [] settable,ISessionImplementor session)的.Type.NullableType.NullSafeSet(IDbCommand cmd,Object value,Int32 index) .Dehydrate(Object id,Object [] fields,Object rowId,Boolean [] includeProperty,Boolean [] [] includeColumns,Int32 table,IDbCommand statement,ISessionImplementor session,Int32 index)at NHibernate.Persister.Entity.AbstractEntityPersister.GeneratedIdentifierBinder.BindValues (IDbCommand ps)NHibernate.Id.Insert.AbstractReturningDelegate.PerformInsert(SqlCommandInfo insertSQL,ISessionImplementor session,IBinder binder)at NHibernate.Persister.Entity.AbstractEntityPersister.Inse 在NHibernate.Action.EntityIdentityInsertAction的NHibernate.Persister.Entity.AbstractEntityPersister.Insert(Object []字段,Object obj,ISessionImplementor会话)中的rt(Object [] fields,Boolean [] notNull,SqlCommandInfo sql,Object obj,ISessionImplementor session).在NHibernate的NHibernate.Event.Default.AbstractSaveEventListener.PerformSaveOrReplicate(对象实体,EntityKey键,IEntityPersister persister,Boolean useIdentityColumn,Object anything,IEventSource source,Boolean requiresImmediateIdAccess)上的NHibernate.Engine.ActionQueue.Execute(IExecutable可执行文件)执行(). Event.Default.AbstractSaveEventListener.SaveWithGeneratedId(对象实体,字符串的entityName,对象什么,IEventSource源,布尔requiresImmediateIdAccess)在NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.SaveWithGeneratedOrRequestedId(SaveOrUpdateEvent事件)在NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.EntityIsTransient(SaveOrUpdateEvent事件)在NHibernate.Event.NHibernate.Impl.SessionImpl.SaveOrUpdate(Object obj)中的NHibernate.Impl.SessionImpl.FireSaveOrUpdate(SaveOrUpdateEvent事件)的Default.DefaultSaveOrUpdateEventListener.OnSaveOrUpdate(SaveOrUpdateEvent事件)
首先发生异常是因为您在类中将同一列映射两次并且不允许.检查这个 IndexOutOfRangeException深入NHibernate的内容
其次(根据你的最新评论)你的Person类中有一个OrganizationId和一个Organization属性,这种情况与谷物类型相反.你不需要它.你可以通过它访问它per1.Organization.Id
如果您的数据库中已有一个组织(比如Id = 5),并且使用OrganizationId外键将Organization类映射到Person类,那么当您编写代码时
Organization theOrganizationWithId5 = nhSession.Get<Organization>(5);
per1.Organization = theOrganizationWithId5;
nhSession.Save(per1);
Run Code Online (Sandbox Code Playgroud)
NHibernate只会在Person表的OrganizationId列中设置值5.你不会填充组织.
| 归档时间: |
|
| 查看次数: |
3385 次 |
| 最近记录: |