2008-08-28 11 views
5

Soy nuevo en NHibernate (mi primer gran proyecto con él).
He estado usando un método simple de acceso a datos creando el objeto ISession dentro de un bloque usando para agarrar mi Objeto o lista de Objetos, y de esa manera la sesión fue destruida después de salir del bloque de código.¿La mejor manera de administrar sesiones en NHibernate?

Esto no funciona en una situación en la que se requiere carga lenta.
Por ejemplo, si tengo un objeto de Cliente que tiene una propiedad que es una colección de Pedidos, cuando se intenta la carga lenta, recibo una excepción de Hibernación.
¿Alguien que usa un método diferente?

Respuesta

6
+0

Solo una nota, algunos meses después. Si bien todavía estamos utilizando los enfoques anteriores, en su mayor parte, hay un trabajo más interesante realizado por las personas que trabajan en el uso de una herramienta IOC para administrar 'ISessions' y' ISessionFactory's; es posible que deseen consultar StructureMap y FubuMvc. proyectos para más información. –

+1

@Matt: eche un vistazo a la instalación de Castle NHibernate, ha existido durante años: http://www.castleproject.org/container/facilities/trunk/nhibernate/index.html –

+0

Los enlaces en la respuesta parecen estar desactualizados . –

1

Mantenga su sesión abierta para toda su unidad de trabajo. Si su sesión es la vida es demasiado pequeña, no puede beneficiarse de la caché de nivel de sesión (que es significativo). Cada vez que puede evitar un viaje de ida y vuelta a la base de datos ahorrará mucho tiempo. Tampoco puede aprovechar la carga diferida, que es crucial para comprender.

Si la duración de la sesión de la sesión es demasiado grande, puede encontrarse con otros problemas.

Si se trata de una aplicación web, probablemente le vaya bien con el patrón de sesión por http. Básicamente, este es un HttpModule que abre la sesión al comienzo de la solicitud y se vacía/cierra al final. Asegúrese de guardar la sesión en HttpContext.Items NO UNA VARIABLE ESTÁTICA. < --- conduce a todo tipo de problemas que no desea tratar.

También puede consultar RhinoCommons para una implementación de unidad de trabajo.

+0

He visto muchos ejemplos de este método de gestión de sesiones para aplicaciones web, pero hacer que funcione con winforms es otra historia. Billy McCafferty hace su mejor esfuerzo, pero no da consejos sobre cómo usar su framework en winforms. Específicamente, cuándo comenzar y purgar una transacción en winforms. –

2

Mira la SummerOfNHibernate transmisiones por Internet para un gran tutorial ... Lo que usted está buscando específicamente no llega hasta Webisode 5 o 6.

Cuestiones relacionadas