Pregunta Mejores prácticas de transacciones de NHibernate [cerrado]


He estado leyendo sobre Nhibernate por un tiempo y he intentado usarlo para un sitio que estoy implementando. Yo leo el artículo de Billy McCafferty sobre las mejores prácticas de NHibernate, pero no vi ninguna indicación sobre dónde es el mejor lugar para manejar las transacciones.

Pensé en poner ese código en el Objeto de acceso a datos (DAO) pero luego no estoy seguro de cómo manejar los casos en los que se usa más de un DAO. ¿Cuáles son los mejores lugares para poner código de transacción en su aplicación NHibernate?


32
2017-12-11 18:50


origen


Respuestas:


Realmente depende de tu entorno. Por ejemplo, usamos el Open-Session-In-View (Patrón de Java pero el patrón es el mismo en .NET) en un sitio ASP.Net y use un HttpModule para controlar las sesiones y las transacciones. El HttpModule abre una sesión e inicia una transacción en el evento BeginRequest y luego confirma la transacción y cierra la sesión en el evento EndRequest.

Diferentes entornos y patrones de comunicación conducirán a diferentes estrategias de gestión de sesión / transacción.

Hay mucha discusión sobre las diversas estrategias en el Grupo de usuarios de NHibernate así como en la web en general.


10
2017-12-11 19:00



Según Ayende, es probable que necesites agregar explícitamente la transacción para todos, incluso la búsqueda. Por favor revisa aquí: http://nhprof.com/Learn/Alerts/DoNotUseImplicitTransactions


11
2018-04-17 04:37



La forma más simple es usar Smart Transaction descrita en

http://rajputyh.blogspot.com/2011/02/nested-transaction-handling-with.html

Utiliza NHibernateSessionManager popular y se escribe una clase simple para garantizar que "abra la transacción cuando lo desee" sin preocuparse por qué lógica primaria y sub lógica está manejando la transacción.


0
2018-04-19 16:05