nhibernate y transacciones anidadas
-
04-10-2019 - |
Pregunta
Sé que no tenga soporte nhibernate transacciones anidadas.
Vamos a decir que tengo algo como esto:
- UserService.BeginTransaction (en la sesión actual)
- UserService.Save
- UserService-> FeedService
- FeedService.BeginTransaction (en la sesión actual)
- FeedService.Save
- FeedService.Commit (en la transacción devuelta en # 3.1)
- UserService-> AddressService
- AddressService.BeginTransaction (en la sesión actual)
- AddressService.Save
- AddressService.Commit (en la transacción devuelta en # 4.1)
- UserService.Commit (en la transacción devuelta en # 1)
¿Qué pasa cuando se invoca commit en # 3.3, se compromete la transacción? Necesito todo lo que sea éxito o no.
Solución
Como dijo Jamie, las transacciones debe ser manejado en un nivel superior para evitar esta situación.
Sin embargo, si debe mantener la Introducción / comprometerse a nivel de "servicio" por cualquier razón, se podría envolver todo en un TransactionScope
, que usted Complete()
sólo después de todo suceeds.
Otros consejos
Sí. La llamada BeginTransaction en 3.1 no va a hacer nada porque ya hay una transacción activa. Si desea que todas sus operaciones a participar en la misma transacción, entonces no llamar Begin / End Transacción en 3.xy 4.x.
Mi consejo es no utilizar transacciones en servicio o clases de repositorios. Yo controlo bien la transacción a nivel de interfaz de usuario o crear una clase que encapsula el proceso de negocio.