que estoy tratando de asignar una relación padre-hijo entre un objeto persona y un objeto Organización en FluentNHibernate utilizando referencias en el archivo de mapeo:Mapeo FluentNhibernate Uso de referencias Índice fuera de límites al añadir nuevos objetos
Referencias (x => x.Organización);
La relación es un objeto Persona que contiene una columna OrganizationId que corresponde a un registro en la tabla Organización con el OrganizationId correspondiente. Los registros de personas diferentes pueden pertenecer a la misma organización.
Cuando recupero un objeto Person, funciona correctamente. Person.Organization está lleno. Puedo guardar un objeto Persona y funciona correctamente. Sin embargo, cuando intento agregar un nuevo objeto Persona, obtengo una excepción Índice fuera de rango de NHibernate. La excepción ocurre cuando se llama a session.SaveOrUpdate (persona). He intentado cambiar la asignación a:
Referencias (x => x.Organization) .Cascade.None()
teniendo el mismo error. No puedo entender qué está causando la excepción. La excepción completa es la siguiente:
System.IndexOutOfRangeException: Índice 22 no válido para este SqlParameterCollection con Count = 22. en System.Data.SqlClient.SqlParameterCollection.RangeCheck (índice Int32) en System.Data.SqlClient.SqlParameterCollection.GetParameter (índice Int32) en System.Data.Common.DbParameterCollection.System.Collections.IList.get_Item (índice Int32) en NHibernate.Type.NullableType.NullSafeSet (IDbCommand cmd, valor del objeto, índice Int32) en NHibernate.Type.ManyToOneType.NullSafeSet (IDbCommand st, valor del objeto, índice Int32, Boolean [] settable, ISessionImplementor session) en NHibernate .Persister.Entity.AbstractEntityPersister.Dehydrate (Object id, Object [] fields, Object rowId, Boolean [] includeProperty, Boolean [] [] includeColumns, tabla Int32, instrucción IDbCommand, sesión ISessionImplementor, índice Int32) en NHibernate.Persister. Entity.AbstractEntityPersister.GeneratedIdentifierBin der.BindValues (IDbCommand ps) en NHibernate.Id.Insert.AbstractReturningDelegate.PerformInsert (SqlCommandInfo insertSQL, ISessionImplementor sesión, carpeta de IBinder) en NHibernate.Persister.Entity.AbstractEntityPersister.Insert (Object [] fields, Boolean [] notNull, sql SqlCommandInfo, Object obj, sesión ISessionImplementor) en NHibernate.Persister.Entity.AbstractEntityPersister.Insert (Object [] campos, Object obj, sesión ISessionImplementor) en NHibernate.Action.EntityIdentityInsertAction.Execute() en NHibernate.Engine.ActionQueue .Execute (ejecutable de IExecutable) en NHibernate.Event.Default.AbstractSaveEventListener.PerformSaveOrReplicate (entidad de objeto, clave EntityKey, persistencia de IEntityPersister, boolean useIdentityColumn, Object anything, fuente de IEventSource, boolean requiresImmediateIdAccess) en NHibernate.Event.Default.AbstractSaveEventListener.SaveWithGeneratedId (entidad Object, String entityName, objeto nada, fuente IEventSource, Boolean requiresImmediateIdAccess) en NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.SaveWithGeneratedOrRequestedId (evento SaveOrUpdateEvent) en NHibernate.Event.Default. DefaultSaveOrUpdateEventListener.EntityIsTransient (evento SaveOrUpdateEvent) en NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.OnSaveOrUpdate (evento SaveOrUpdateEvent) en NHibernate.Impl.SessionImpl.FireSaveOrUpdate (evento SaveOrUpdateEvent) en NHibernate.Impl.SessionImpl.SaveOrUpdate (Object obj)
No puedo entender qué está causando la excepción porque no ha publicado el código que causa la excepción. (entidad/clases de mapeo) – Paco
Acabo de agregar algo de texto a la pregunta. Se produce al llamar a session.SaveOrUpdate (persona) cuando el objeto persona es una persona nueva que no existe en la base de datos. – Jeff
¿Se ha insertado la organización principal anteriormente? – mxmissile