El escenario es el siguiente,nhibernate no Eliminar en cascada los niños
tengo 3 objetos (i simplificado los nombres) llamado padre, niño de los padres del niño & del niño
niño de los padres es un conjunto de padres y hijo del niño es un conjunto en el niño.
mapeo es el siguiente (partes pertinentes)
padres
<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>
hijo de padres
<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>
Lo que quiero lograr es que cuando se borra el padre, habría una cascada eliminar todo el camino a través del niño del niño. Pero lo que sucede actualmente es esto.
(esto es puramente para fines de prueba mapeo) conseguir una entidad controladora (funciona bien)
IQuery query = session.CreateQuery("from Parent where ID =" + ID);
IParent doc = query.UniqueResult<Parent>();
ahora la parte de borrado
session.Delete(doc);
transaction.Commit();
Después de haber resuelto el 'no puede insertar un valor nulo' error con cascada e inversa. Espero que esto borre todo con este código, pero solo se está eliminando el padre.
¿Extrañé algo en mi mapeo que probablemente se perderá? ¡Cualquier sugerencia en la dirección correcta es más que bienvenida!
Diego, gracias por la respuesta al punto. (y explicación)
Fui con la eliminación de on-delete="cascade"
, esto porque me gusta tanto control como sea posible en el código y no en la base de datos.
El código publicado a continuación es el resultado (de trabajo).
padres del niño
<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>
de los padres
<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>
Esperamos que esto ayude a las personas con el mismo problema!