我有一个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>
我们在应用程序中使用一个Thread。
问题是它通常在CurrentSessionContext中没有会话,所以它会重新打开一个新会话,这会破坏我们很多属性的延迟加载。
请告诉我为什么它从上下文中取消绑定会话以及如何避免这种情况?
答案 0 :(得分:1)
您可以尝试使用thread_static
上下文。
但是,对Winforms应用程序使用单个会话是不正确的,并且会导致问题。