Lo scenario è il seguente,NHibernate non cascata eliminare i bambini
Ho 3 oggetti (ho semplificato i nomi) di nome Parent , figlio di genitori del bambino & del bambino
figlio di genitore è un insieme di genitore, e il figlio di un bambino è un insieme di bambini.
mappatura è la seguente (parti interessate)
genitore
<set name="parentset"
table="pc-table"
lazy="false"
fetch="subselect"
cascade="all-delete-orphan"
inverse="true">
<key column=FK_ID_PC" on-delete="cascade"/>
<one-to-many class="parentchild,parentchild-ns"/>
</set>
bambino con i genitori
<set name="childset"
table="cc-table"
lazy="false"
fetch="subselect"
cascade="all-delete-orphan"
inverse="true">
<key column="FK_ID_CC" on-delete="cascade"/>
<one-to-many class="childschild,childschild-ns"/>
</set>
Quello che voglio ottenere è che quando elimino il genitore, ci sarebbe un cascata elimina completamente attraverso il figlio del bambino. Ma ciò che accade attualmente è questo.
(questo è puramente a scopo di test mappatura) ottenere una controllante (funziona bene)
IQuery query = session.CreateQuery("from Parent where ID =" + ID);
IParent doc = query.UniqueResult<Parent>();
ora la parte di eliminazione
session.Delete(doc);
transaction.Commit();
Dopo aver risolto il 'non può inserire il valore null' errore con cascading e inverse spero che questo ora cancelli tutto con questo codice, ma solo il genitore viene eliminato.
Mi sono perso qualcosa nella mia mappatura che è probabile che manchi? Qualsiasi suggerimento nella giusta direzione è più che benvenuto!
Diego, grazie per la risposta al punto. (e spiegazione)
Sono andato con la rimozione del on-delete="cascade"
, questo perché mi piace il maggior controllo possibile nel codice e non nel database.
Il codice indicato di seguito è il risultato (funzionante).
genitore bambino
<set name="parentset"
table="pc-table"
cascade="all-delete-orphan"
inverse="true"
batch-size="5">
<key column=FK_ID_PC"/>
<one-to-many class="parentchild,parentchild-ns"/>
</set>
genitori
<set name="childset"
table="cc-table"
cascade="all-delete-orphan"
batch-size="5"
inverse="true">
<key column="FK_ID_CC">
<one-to-many class="childschild,childschild-ns"/>
</set>
Spero che questo aiuti le persone con lo stesso problema!