Mejores prácticas de transacciones de NHibernate
transactions (3)
Realmente depende de tu entorno. Por ejemplo, utilizamos el patrón Open-Session-In-View (enlace Java pero el patrón es el mismo en .NET) en un sitio ASP.Net y usamos un HttpModule para controlar sesiones y 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.
Existe una gran cantidad de discusiones sobre las diversas estrategias en el Grupo de usuarios de NHibernate , así como en la web en general.
He estado leyendo sobre Nhibernate por un tiempo y he estado tratando de usarlo para un sitio que estoy implementando. Leí 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?
Según Ayende, es probable que necesites agregar explícitamente la transacción para todos, incluso la búsqueda. Por favor, consulte aquí: http://nhprof.com/Learn/Alerts/DoNotUseImplicitTransactions
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.