He estado utilizando NHibernate con éxito desde hace bastante tiempo y he podido resolver muchos errores con una aplicación que desarrollado con él y que se está ejecutando en producción. Sin embargo, el reciente obstáculo me tiene realmente rascándome la cabeza."Índice n nulo para este SqlParameterCollection con Count = n" O "clave foránea no puede ser nulo"
Recientemente tuve que expandir la biblioteca de clases con algunas clases nuevas que están anidadas como secundarias para algunas clases ya existentes. Acabo de copiar el mismo modelo para el mapeo agregado que ya estaba usando con éxito , pero esta vez no funciona.
Ahora cuando se utiliza la siguiente en el archivo de asignación de los padres:
<bag name="SeaInfoItems" table="EDIImport_SeaInfo" lazy="false" cascade="save-update">
<key column="EDI_FK_OWNERID"/>
<one-to-many class="FargoGate.AppLib.EdiImportSeaInfo, FargoGate.AppLib"/>
</bag>
puedo elegir, en la clase del niño, ya sea para uso:
<property name="EDI_FK_OWNERID" column="EDI_FK_OWNERID" />
... lo que me da la infame "Índice inválido n para este SqlParameterCollection con Count = n" error.
O trato con esta solución que encontré después de algunas google:
<property name="EDI_FK_OWNERID" column="EDI_FK_OWNERID" insert="false" update="false" />
... lo que me un "No se puede insertar el valor NULL en la columna 'EDI_FK_OWNERID' ... la columna no permite valores nulos da " error.
Así que, básicamente, tengo que elegir entre la peste y el cólera.
Lo que no entiendo es que funciona perfectamente para las clases agregadas ya existentes, y realmente no puedo ver la diferencia. Lo único es que esta clave externa (EDI_FK_OWNERID) podría referirse a dos diferentes tablas principales. El diseño de la base de datos es malo, lo sé, pero no lo diseñé, y es mi tarea desarrollarlo para bien o para mal. No puedo cambiar el diseño de la base de datos.
La otra diferencia es que eliminé totalmente la referencia de clave foránea de las clases secundarias ya existentes (las asignaciones y los miembros de la clase). Traté de emular eso, por supuesto, pero fue en vano.
También descubrí que una de las nuevas clases (que es bastante pequeña) también funciona bien. Pero tampoco puedo ver cuál es la diferencia aquí. Estoy perplejo!
¿Alguien tiene una pista?
en realidad el nulo índice n ... excepción que te ha llevado directamente a http: // stackoverflow.com/questions/2298026/indexoutofrangeexception-deep-in-the-bowels-of-nhibernate/2311256 # 2311256 – Jaguar