我试图映射一个Person对象,并使用引用在这样的映射文件中FluentNHibernate一个组织对象之间的父子关系:FluentNhibernate制图的参考指标超出范围时添加新的对象
引用(X => x.Organization);
关系是一个Person对象包含一个OrganizationId列,该列与组织表中的记录对应的OrganizationId相对应。不同的人员记录可以属于同一个组织。
当我检索一个Person对象时,它可以正常工作。 Person.Organization被填充。我可以保存一个Person对象,并且它可以正常工作。但是,当我尝试添加一个新的Person对象时,我从NHibernate中得到一个Index Out of Range异常。调用session.SaveOrUpdate(person)时发生异常。我试着更改映射到:
引用(X => x.Organization).Cascade.None()
仍然得到同样的错误。我无法弄清楚是什么导致了这个异常。完全的例外是这样的:
System.IndexOutOfRangeException:该计数= 22的SqlParameterCollection的索引22无效。 System.Data.SqlClient.SqlParameterCollection.RangeCheck(Int32 index) at System.Data.SqlClient.SqlParameterCollection.GetParameter(Int32 index) at System.Data.Common.DbParameterCollection.System.Collections.IList.get_Item(Int32 index ) at NHibernate.Type.NullableType.NullSafeSet(IDbCommand cmd,Object value,Int32 index) at NHibernate.Type.ManyToOneType.NullSafeSet(IDbCommand st,Object value,Int32 index,Boolean [] settable,ISessionImplementor session) at NHibernate .Persister.Entity.AbstractEntityPersister.Dehydrate(Object id,Object [] fields,Object rowId,Boolean [] includeProperty,Boolean [] [] includeColumns,Int32表,IDbCommand语句,ISessionImplementor会话,Int32索引) at NHibernate.Persister。 Entity.AbstractEntityPersister.GeneratedIdentifierBin der.BindValues(IDbCommand的PS) 在NHibernate.Id.Insert.AbstractReturningDelegate.PerformInsert(SqlCommandInfo insertSQL,ISessionImplementor会话的IBinder粘合剂) 在NHibernate.Persister.Entity.AbstractEntityPersister.Insert(对象[]字段,布尔[] NOTNULL, SqlCommandInfo SQL,对象OBJ,ISessionImplementor会话) 在NHibernate.Persister.Entity.AbstractEntityPersister.Insert(对象[]字段,对象OBJ,ISessionImplementor会话) 在NHibernate.Action.EntityIdentityInsertAction.Execute() 在NHibernate.Engine.ActionQueue .Execute(IExecutable可执行文件) at NHibernate.Event.Default.AbstractSaveEventListener.PerformSaveOrReplicate(Object entity,EntityKey key,IEntityPersister persister,Boolean useIdentityColumn,Object anything,IEventSource source,Boolean requiresImmediateIdAccess) 在NHibernate.Event.Default.AbstractSaveEventListener.SaveWithGeneratedId在NHibernate.Event.Default(对象实体,字符串的entityName,对象什么,IEventSource源,布尔requiresImmediateIdAccess) 在NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.SaveWithGeneratedOrRequestedId(SaveOrUpdateEvent事件) 。 DefaultSaveOrUpdateEventListener.EntityIsTransient(SaveOrUpdateEvent事件) 在NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.OnSaveOrUpdate(SaveOrUpdateEvent事件) 在NHibernate.Impl.SessionImpl.FireSaveOrUpdate(SaveOrUpdateEvent事件) 在NHibernate.Impl.SessionImpl.SaveOrUpdate(对象OBJ)
我找不出什么原因导致异常,因为您没有发布导致异常的代码。 (实体/映射类) – Paco 2010-03-10 19:48:07
只是在问题中添加了一些文本。它在调用session.SaveOrUpdate(person) 时发生,当person对象是数据库中不存在的新人时。 – Jeff 2010-03-10 20:35:07
以前是否插入了父级组织? – mxmissile 2010-03-10 20:40:24