我有一个带有nhibernate 3.3的Asp.Net WebForms应用程序,我正在尝试使用最佳实践等对每个请求控件执行一个有效的会话。
直到昨天我在Application_Start事件中构建我的会话工厂,在global.asax中,并在Begin_request和End_Request事件中控制会话,如下所示:
public void Application_BeginRequest(object sender, EventArgs e)
{
ISession currentSession;
if (System.Web.HttpContext.Current.Items.Contains("NHCurrentSession"))
{
currentSession = (ISession)System.Web.HttpContext.Current.Items["NHCurrentSession"];
if (currentSession.Transaction.IsActive)
{
currentSession.Transaction.Rollback();
currentSession.Transaction.Dispose();
}
currentSession.Dispose();
System.Web.HttpContext.Current.Items.Remove("NHCurrentSession");
}
}
public void Application_EndRequest(object sender, EventArgs e)
{
ISession currentSession;
if (System.Web.HttpContext.Current.Items.Contains("NHCurrentSession"))
{
currentSession = (ISession)System.Web.HttpContext.Current.Items["NHCurrentSession"];
if(currentSession.Transaction.IsActive)
{
currentSession.Transaction.Commit();
currentSession.Transaction.Dispose();
}
currentSession.Dispose();
System.Web.HttpContext.Current.Items.Remove("NHCurrentSession");
}
}
我想知道更好的方法,以及如何在web.config / hibernate中配置它
我尝试了一些不同的东西,使用CurrentSessionContext,但它只在我使用配置thread_static时才有效。当我尝试使用managed_web时,它失败了。
我可以在网络中使用thread_static吗?
我听说过unhaddins,但我找不到一个易于理解的使用webforms的例子,只有wcf,我想知道anhaddins是否与nh 3.3兼容。 我的第二个选择是构建一个webmodule,但我不知道如何。 我的最终目标是在Windows窗体应用程序中使用我在网络中使用的相同结构。