La lógica de negocio dentro de un proceso es:Nhibernate - artículo consigue su ParentID actualizado a null en lugar de eliminarse
- iniciar la transacción
- agregar un elemento a una colección
- realizar una búsqueda ("somethingA ")
- elimine ese elemento según el paso anterior.
- confirmar la transacción
Im usando en cascada todas-delete-huérfanos, y la inversa = true, tanto en mi clase padre. Al eliminar el elemento de la colección, configuro .parentObj = null
y elimino el elemento de la colección.
Al utilizar TemplateFlushMode.Auto
, que perfila la base de datos y se hace lo siguiente:
- Insertar elemento
- SELECT relacionados tosomethingA
- ACTUALIZACIÓN parentID (FK al padre) del artículo a NULL
(el elemento de inserción se realiza debido a que un find()
se hace, para garantizar la consistencia de los datos en la base de datos). La selección se hace, y entonces esperaría que se realice un DELETE
... pero se ha realizado una actualización a parentID = null
.
Al realizar una Session.Flush()
justo antes de la Find()
, ocurre lo siguiente:
- Insertar elemento
- SELECT relacionados tosomethingA
- Eliminar elemento
Al utilizar TemplateFlushMode.Commit
, los cambios se realizan al final de la transacción y el artículo nunca se inserta:
- SELECCIONAR relacionados tosomethingA
La aplicación que estoy trabajando está utilizando TemplateFlushMode.Auto
, por lo que me pregunto, ¿hay una explicación de por qué la cascada no funciona si se realiza un Select en medio de una el artículo se agrega y luego se elimina en la misma transacción?
Sé que la primera respuesta que aparece es "no agregue un elemento a una colección, si se eliminará después". Pero prefiero no cambiar la lógica de negocios.
¿Alguien sabe por qué se está realizando una actualización en lugar de delete
al usar AUTO
? (cuando se utiliza Commit
no inserta el objeto)
Hola Adrián, buena pregunta, tengo la misma pregunta que en realidad. – san983
¿podría mostrar el mapeo? – giammin
¿Puedo preguntar qué estás tratando de lograr con esto? puede ser una solución diferente. – ivowiblo