在WebForms应用程序中为每个请求构建会话的简便方法

时间:2013-07-03 14:35:34

标签: nhibernate webforms

我有一个带有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窗体应用程序中使用我在网络中使用的相同结构。

0 个答案:

没有答案