tutorial isessionfactory fluently espaƱol c# nhibernate fluent-nhibernate

c# - isessionfactory - NHibernate Configuration "current_session_context_class" valores posibles y descripciones



nhibernate download c# (2)

Actualmente tengo esta configuración fluida de NHibernate:

public class NHibernateConfig { public static Configuration Configure() { var cfg = Fluently.Configure() .Database(Config.PersistenceConfiguration) .Mappings(m => { m.FluentMappings.AddFromAssemblyOf<SomeAssembly>(); m.FluentMappings.Conventions.AddFromAssemblyOf<EnumConvention>(); }) .ExposeConfiguration(x => x.SetProperty("current_session_context_class", "thread_static")) .BuildConfiguration(); return cfg; } }

Mi pregunta es sobre la propiedad expuesta " current_session_context_class ". Conozco dos valores para esto: thread_static o web . Un colega mío señaló otro valor, que es llamada . ¿Hay alguna documentación conocida para los valores de esta propiedad? Si no, ¿hay alguna buena descripción para estos valores? Revisé Google durante horas para obtener algunas explicaciones sin resultado válido.


"managed_web", "call", "thread_static" y "web" son valores posibles. Configurado así en la configuración de nhibernate:

<property name="current_session_context_class">call</property>

Una vez que esto esté configurado, puede usar SessionFactory.GetCurrentSession (). Tienes que vincular y desvincular la sesión tú mismo. Una implementación de ejemplo:

if (CallSessionContext.HasBind(_sessionFactory)) { session = SessionFactory.GetCurrentSession(); } else { session = SessionFactory.OpenSession(); CallSessionContext.Bind(session); }

En lugar de CallSessionContext, también puede usar ManagedWebSessionContext o ThreadStaticSessionContext.

ManagedWebSessionContext - Adecuado para la aplicación Asp.Net. La sesión se adjunta al HttpContext actual (se proporciona como parámetro durante el enlace).

ManagedWebSessionContext.Bind(HttpContext.Current,session)

ThreadStaticSessionContext: la sesión se adjunta al hilo actual (no recomendaré usar esto ya que los hilos continúan cambiando bruscamente y la sesión adjunta podría perderse).

CallSessionContext - Adecuado para aplicaciones no web. La sesión se adjunta a CallContext. Podría estar equivocado, pero me imagino esto como una sesión adjunta a SessionFactory. Siempre que tenga una SessionFactory para toda la aplicación, este enfoque garantizará que nunca obtenga sesiones activas concurrentes.


Aquí está mi intento de explicar esto (cualquier entrada adicional sería bienvenida):

Diferencia entre CallSessionContext, ThreadLocalSessionContext y ThreadStaticSessionContext

Hay una sección sobre estos en la documentación estándar de NH, pero no creo que hagan un buen trabajo al explicarlo o dar ejemplos sobre cómo usarlo exactamente. Aquí está el enlace de documentación de NH.

http://nhibernate.info/doc/nhibernate-reference/architecture.html#architecture-current-session

Hay varios artículos decentes en sobre cómo usaría esto:
¿Cuál es el mejor enfoque de administración de sesiones de NHibernate para usar en una aplicación de servicio de Windows multithread?
NHibernate.HibernateException: ninguna sesión vinculada al contexto actual