打开/关闭NHibernate会话

Ale*_*ril 3 c# nhibernate session

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

SessionFactory.Instance //returns ISessionFactory
Run Code Online (Sandbox Code Playgroud)

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

using(ISession session = SessionFactory.Instance.OpenSession())
{
    using(ITransaction transaction = session.BeginTransaction())
    {
        //some operation
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

UPDATE

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

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

using(ISession session = SessionFactory.Instance.GetCurrentSession())
{
    using(ITransaction transaction = session.BeginTransaction())
    {
        //some operation
    }
}
Run Code Online (Sandbox Code Playgroud)

Min*_*Min 9

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

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

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


dbo*_*nes 8

我想这取决于你的谈话

  • 会话每个请求
  • 会话每个请求与 - 分离对象
  • 的session-per-谈话

有关该外观的更多信息,请点击此处

以下是一些实现方面的链接

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

对于一个完整的架构,请看一下尖锐的架构 <这是基于最佳实践,我会高度重新考虑它

Nhibernate ep 13的夏天是关于与Asp.Net的会议