2010-12-29 8 views
6

Necesito algunos consejos sobre la gestión de sesiones de NHibernate para una aplicación C# WinForms.Consejo de administración de sesiones de NHibernate

Actualmente estoy portando una aplicación para usar NHibernate. También estoy empleando un patrón UnitOfWork como se describe en el siguiente enlace;

http://nhforge.org/wikis/patternsandpractices/nhibernate-and-the-unit-of-work-pattern.aspx

Mi pregunta se refiere a las sesiones.

  1. ¿Solo puede tener una sesión ejecutándose por hilo en todo momento?

  2. Tengo un escenario en el que una sesión (UnitOfWork) puede estar abierta para un formulario mostrado por la aplicación pero el usuario abre otra forma (es decir, Herramientas - Opciones) que me gustaría tener su propia UnitOfWork. Claramente, en este caso, tendría más sentido abrir otra sesión para el formulario "Herramientas - Opciones" y no usar la sesión actualmente abierta para el formulario subyacente.

  3. ¿Podemos tener un Dictionary of Sessions en un hilo?

Se agradece cualquier consejo sobre la gestión de sesiones.

Respuesta

3

1 - Puede tener tantas sesiones como requiera su caso de uso.

2 - Eso está bien, en base a 1.

3 - Usted puede poner las variables de sesión en un diccionario o cualquier otra colección.

Lo que no debe hacer a menos que realmente sepa lo que está haciendo y por qué es:

  • utilizar la misma sesión en más de un hilo
  • entidades de paso de una sesión/UoW a otro
  • intento de reutilizar una sesión que ha iniciado una excepción (no hagas esto incluso si usted cree que sabe lo que está haciendo)
+0

¿Cómo es que no puedes tener más de una sesión por hilo? – Hugusta

+0

@Hugusta Usted ** puede ** tener múltiples sesiones por hilo. – Jay

+0

oh sí ... ¡lo leí mal! Gracias por su respuesta. – Hugusta

4

+1 en lo que dijo Jay. También recomiendo leer el artículo de Oren Eini en La construcción de una aplicación de escritorio de tareas con NHibernate:

http://msdn.microsoft.com/en-us/magazine/ee819139.aspx

Utiliza WPF como la tecnología de interfaz de usuario, pero todo lo que dice (WRT NHibernate en aplicaciones de escritorio) es igualmente relevante para WinForms.

Cuestiones relacionadas