"managed_web", "call", "thread_static" и "web" являются возможными значениями. Настроен так в конфигурации nhibernate:
<property name="current_session_context_class">call</property>
Как только это настроено, вы можете использовать SessionFactory.GetCurrentSession (). Вы должны связать и отменить привязку сессии самостоятельно. Один пример реализации:
if (CallSessionContext.HasBind(_sessionFactory))
{
session = SessionFactory.GetCurrentSession();
}
else
{
session = SessionFactory.OpenSession();
CallSessionContext.Bind(session);
}
Вместо CallSessionContext вы также можете использовать ManagedWebSessionContext или ThreadStaticSessionContext.
ManagedWebSessionContext - Подходит для приложения Asp.Net. Сеанс привязан к текущему HttpContext (предоставляется как параметр при привязке).
ManagedWebSessionContext.Bind(HttpContext.Current,session)
ThreadStaticSessionContext - Сессия присоединена к текущему потоку (я не рекомендую использовать это, поскольку потоки продолжают резко переключаться, и ваш присоединенный сеанс может быть потерян).
CallSessionContext - Подходит для не веб-приложений. Сессия прикреплена к CallContext. Я могу ошибаться, но я представляю это как сессию, присоединенную к самому SessionFactory. Пока у вас есть одна SessionFactory для всего приложения, этот подход гарантирует, что вы никогда не получите параллельные активные сеансы.