【问题标题】:Open/Close NHibernate Session打开/关闭 NHibernate 会话
【发布时间】:2014-02-19 00:08:22
【问题描述】:

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

SessionFactory.Instance //returns ISessionFactory

如下打开/关闭会话是否常见/最佳做法?

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

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

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

更新

对于 HttpModule,我也有类似的想法:

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

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

【问题讨论】:

    标签: c# nhibernate session


    【解决方案1】:

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

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

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

    【讨论】:

    • 正确。由于对 WebSessionContext 缺乏了解,我最初感到气馁,但 HttpModule(begin/end) 功能似乎工作正常。
    【解决方案2】:

    我认为这取决于你的谈话

    • 每个请求的会话
    • 每个请求的会话与分离对象
    • 每会话会话

    更多关于look here的信息

    这里有一些实现的链接

    注意会话可以注入到 Doa/资源库中。

    对于完整的架构,请查看sharp architecture

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

    【讨论】:

    • 非常有用的一组链接,谢谢。
    猜你喜欢
    • 2010-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-18
    • 2011-12-12
    • 2012-11-10
    • 2011-01-14
    • 1970-01-01
    相关资源
    最近更新 更多