Para una aplicación web, parece que una buena forma de manejar la sesión es usar la configuración <property name="current_session_context_class">managed_web</property>
, llame al CurrentSessionContext.Bind/Unbind
en Begin/EndRequest. Entonces solo puedo usar sessionFactory.GetCurrentSession()
en la clase de repositorio.Estrategia de gestión de sesiones de Nhibernate para aplicaciones web con trabajadores en segundo plano?
Esto funciona bien para todas las solicitudes de página. Pero tengo trabajadores de fondo haciendo cosas y utilizando las mismas clases de repositorio para hacer cosas. Estos no se ejecutan dentro de una solicitud web, por lo que el manejo de la sesión no funcionará.
¿Alguna sugerencia de cómo se puede resolver esto?
Si no quiere hacer referencia a 'HttpContext.Current', puede usar' NHibernate.Context.ReflectiveHttpContext' para determinar si un contexto está disponible. Esto es útil en situaciones donde no desea hacer referencia 'System.Web' en un proyecto de acceso a datos, por ejemplo. – Siewers
Gracias, buen consejo! ¡He editado el código para usarlo en su lugar! :) – Allrameest
¡Muchas gracias! Estuve desconcertado por esto durante medio día. Tengo un proyecto de WebForms con un servicio WCF, y 'CurrentSessionContext.Bind' arrojaba una' NullReferenceException'. Tu código funcionó perfectamente para mí: D –