打开/关闭NHibernate会话

时间:2009-09-16 19:20:14

标签: c# nhibernate session

在Web应用程序中使用FluentNHibernate,我创建了一个单例SessionFactory类,具有以下功能:

SessionFactory.Instance //returns ISessionFactory

按以下方式打开/关闭会话是常见/最佳做法吗?

using(ISession session = SessionFactory.Instance.OpenSession())
{
    using(ITransaction transaction = session.BeginTransaction())
    {
        //some operation
    }
}

上面的代码将存在于给定实体的相应存储库类中。

我注意到有一个主题是创建一个HttpModule来在应用程序的开始和结束时打开会话,但我想知道这是情境还是更常见。

更新

继续使用HttpModule,我有类似的想法:

使用存储库类,我基本上执行以下操作(config使用WebSessionContext):

using(ISession session = SessionFactory.Instance.GetCurrentSession())
{
    using(ITransaction transaction = session.BeginTransaction())
    {
        //some operation
    }
}

2 个答案:

答案 0 :(得分:9)

如果您正在使用Web应用程序,我建议使用HttpModule打开会话并在请求周期关闭它。会话工厂我可能会在Application_Start上实例化。

对于存储库对象,我会通过构造函数将会话传递给它。

我个人认为存储库对象没有足够的信息来决定如何处理会话。

答案 1 :(得分:8)

我认为这取决于你的谈话

  • 每次请求会话
  • session-per-request-with-detached-objects
  • 会话每次会话

了解有关look here

的更多信息

以下是有关实施的一些链接

注意会话可以注入Doa / respository。

对于完整的体系结构,请查看sharp architecture<这是基于最佳实践,我会高度重新评估

Summer of Nhibernate ep 13,与Asp.Net的会话