Ho utilizzato con successo NHibernate per un bel po 'di tempo e sono stati in grado di risolvere molte insidie con un'applicazione che ho sviluppato con esso e che è in esecuzione in produzione. Il recente ostacolo mi ha davvero graffiato la testa, però."L'indice n non valido per questo SqlParameterCollection con Count = n" OR "chiave esterna non può essere nullo"
Recentemente ho dovuto espandere la libreria di classi con alcune nuove classi che sono nidificate come figli ad alcune classi già esistenti. Ho appena copiato lo stesso modello per la mappatura aggregata che utilizzavo già con successo , ma questa volta non funziona.
Ora, quando io uso il seguente nel file di mapping genitore:
<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>
posso scegliere di, nella classe del bambino, sia per uso:
<property name="EDI_FK_OWNERID" column="EDI_FK_OWNERID" />
... che mi dà la infame "Indice n non valido per questo errore SqlParameterCollection con Count = n".
O provo con questa soluzione che ho trovato dopo un po 'Googling:
<property name="EDI_FK_OWNERID" column="EDI_FK_OWNERID" insert="false" update="false" />
... che mi ha un "Impossibile inserire il valore NULL nella colonna 'EDI_FK_OWNERID' ... colonna non consente i null dà ". errore.
Quindi in pratica devo scegliere tra parassiti e colera.
Quello che non capisco è che funziona perfettamente per le classi di aggregazione già esistenti e non riesco davvero a individuare la differenza. L'unica cosa è che questa chiave esterna (EDI_FK_OWNERID) potrebbe fare riferimento a due tabelle genitore diverse. Disegno del database errato, lo so, ma non l'ho progettato io, e il mio compito è di svilupparlo nel bene o nel male. Non riesco a cambiare il design del database.
L'altra differenza è che ho rimosso completamente il riferimento alla chiave esterna dalle classi figlio già esistenti (i mapping così come i membri della classe). Ho cercato di emularlo, naturalmente, ma inutilmente.
Inoltre ho scoperto che una delle nuove classi (che è piuttosto piccola) funziona anche bene. Ma non riesco a vedere quale sia la differenza qui. Sono perplesso!
Qualcuno ha un indizio?
in realtà l'indice non valido n ... eccezione che avrebbe portato direttamente a http: // StackOverflow.it/questions/2298026/indexoutofrangeexception-deep-in-the-bowels-of-nhibernate/2311256 # 2311256 – Jaguar