首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NHibernate - ISession

NHibernate - ISession
EN

Stack Overflow用户
提问于 2010-06-13 05:14:31
回答 2查看 486关注 0票数 2

关于ISession的声明。

我们应该在每次使用会话时都关闭它,还是应该让它保持打开状态?

我之所以这样问,是因为在NHibernate手册(nhforge.org)中,他们建议我们在Application_Start中声明它一次,但我不知道我们是否应该在每次使用时都关闭它。

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-06-13 05:20:42

您可以只保留一个对ISessionFactory的静态引用,它确实可以在web应用程序的Application_Start中实例化。

但是,ISession不能保持打开状态,也不能在两个或多个请求之间共享。你应该采用“每个请求一个会话”的模式,它允许你为每个超文本传输协议请求构建一个单独的ISession,并在请求被处理后安全地处理它(这是假设你正在编写一个web应用程序)。

例如,在项目中处理NHibernate会话的代码可能如下所示:

代码语言:javascript
复制
public static class NHibernateHelper {

    static ISessionFactory _factory;

    public static NHibernateHelper(){
        //This code runs once when the application starts
        //Use whatever is needed to build your ISessionFactory (read configuration, etc.)
        _factory = CreateYourSessionFactory();
    }

    const string SessionKey = "NhibernateSessionPerRequest";

    public static ISession OpenSession(){
        var context = HttpContext.Current;

        //Check whether there is an already open ISession for this request
        if(context != null && context.Items.ContainsKey(SessionKey)){
            //Return the open ISession
            return (ISession)context.Items[SessionKey];
        }
        else{
            //Create a new ISession and store it in HttpContext
            var newSession = _factory.OpenSession();
            if(context != null)
                context.Items[SessionKey] = newSession;

            return newSession;
        }
    }
}

这段代码可能太简单了,而且还没有经过测试(实际上也没有编译过),但它应该可以工作。为了更安全地处理您的会话,您还可以使用IoC容器(例如Autofac),并使用依赖于ISessions请求的生命周期注册您的HTTP (在这种情况下,Autofac将为您处理所有事情)。

票数 1
EN

Stack Overflow用户

发布于 2010-06-13 18:26:36

当您使用完会话时,应该关闭它们。有多种可能的方法来管理会话的生命周期,并根据每个场景选择正确的方法。“工作单元”和“每个请求的会话”是两种最常用的会话生存期管理模式。

在Application_Start中,您应该创建SessionFactory,而不是会话。SessionFactory不需要关闭。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3030120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档