NHibernate Transactions Best Practices [cerrado]


He estado leyendo sobre Nhibernate durante 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 transacciones.

Pensé en poner ese código en el Objeto de Acceso a Datos (DAO), pero entonces no estoy seguro de cómo manejar los casos en los que se utiliza más de un DAO. ¿Cuáles son los mejores lugares para poner el código de transacción en ¿su Solicitud de NHibernate?

Author: DJ., 2008-12-11

3 answers

Realmente depende de su entorno. Por ejemplo, usamos el patrón Open-Session-In-View (enlace Java pero el patrón es el mismo en. Net) en un ASP.Net site and use an HttpModule for controlling sessions and transactions. 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 sesiones / transacciones.

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

 10
Author: Sean Carpenter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-01-03 03:09:44

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

 11
Author: Liang Wu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-04-17 04:37:15

La forma más sencilla es usar la Transacción Inteligente descrita en

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

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

 0
Author: Yogee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-04-19 16:05:16