Winforms NHibernate';正在清理s的ICurrentSessionContext

Winforms NHibernate';正在清理s的ICurrentSessionContext,winforms,session,nhibernate,Winforms,Session,Nhibernate,我有一个Windows.Forms应用程序,我们需要使用一个会话并保持其打开状态,因为我们的应用程序是一个遗留产品,我们正在迁移到NH 以下是获取会话的代码: public static ISession GetCurrentSession() { ISession session; if ( CurrentSessionContext.HasBind( SessionFactory ) ) { session = SessionFactory.GetC

我有一个Windows.Forms应用程序,我们需要使用一个会话并保持其打开状态,因为我们的应用程序是一个遗留产品,我们正在迁移到NH

以下是获取会话的代码:

public static ISession GetCurrentSession()
{
    ISession session;

    if ( CurrentSessionContext.HasBind( SessionFactory ) )
    {
        session = SessionFactory.GetCurrentSession();
    }
    else
    {
        _Log.Info( "Unable to get a current session. Opening a new one." );

        session = OpenSession();

        CurrentSessionContext.Bind( session );
    }

    return session;
}
hibernate.cfg.xml具有以下属性:

<property name="current_session_context_class">call</property>
呼叫
我们在应用程序中使用一个线程

问题是,它通常在CurrentSessionContext中没有会话,因此它会重新打开一个新会话,从而打破许多属性的延迟加载


请告诉我为什么它会将会话从上下文中解除绑定,以及如何避免这种情况?

您可以尝试使用
thread\u static
上下文


但是,对Winforms应用程序使用单个会话是不正确的,会导致问题。

您可以尝试使用
thread\u static
上下文

但是,对Winforms应用程序使用单个会话是不正确的,并且会导致问题