Pregunta

Sé que no tenga soporte nhibernate transacciones anidadas.

Vamos a decir que tengo algo como esto:

  1. UserService.BeginTransaction (en la sesión actual)
  2. UserService.Save
  3. UserService-> FeedService
    1. FeedService.BeginTransaction (en la sesión actual)
    2. FeedService.Save
    3. FeedService.Commit (en la transacción devuelta en # 3.1)
  4. UserService-> AddressService
    1. AddressService.BeginTransaction (en la sesión actual)
    2. AddressService.Save
    3. AddressService.Commit (en la transacción devuelta en # 4.1)
  5. 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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top