【问题标题】:NHibernate Transactions in Open View per Session - suggested practices?每个会话打开视图中的 NHibernate 事务 - 建议的做法?
【发布时间】:2008-12-25 10:56:59
【问题描述】:

清理一些事务逻辑并想知道其他人是如何处理它的。

Ayende 的建议似乎是在服务边界处理事务。这是一个 ASP.NET Web 应用程序,因此它没有明确的服务边界,至少现在没有。

人们做什么?

  • 在 HttpModule 中为每个请求创建单个事务并在 EndRequest 上处理提交,在错误时回滚?
  • 在应用程序的实际“服务”中创建事务并在多个地方处理?
  • 还有别的吗?

【问题讨论】:

    标签: nhibernate transactions


    【解决方案1】:

    您可以为您的服务层使用 IoC 容器,该容器可以管理事务和 Nibenrate 会话。

    您的 WebApp 控制器 => 调用 (A) 服务层 => 调用 (B) 一个或多个 DAO 方法/操作。

    像 Spring.NET 这样的 IoC 容器将管理 TX 范围,例如在 (A) 中,并将在 (B) 中为您的 DAO 提供一个 Session。提交(或回滚)将在服务层调用结束时处理。

    【讨论】:

      【解决方案2】:

      大多数人使用第一个要点中所述的按请求会话策略。但是,我不认为事务需要在 EndRequest 上提交。在许多网页中,根据用户操作(例如单击提交)提交事务并让 EndRequest 处理 ISession 的处理会更容易。

      据我所知,没有必要创建 HttpModule,因为可以在 global.asax 中创建相同的功能:http://forum.hibernate.org/viewtopic.php?t=993041

      【讨论】:

        猜你喜欢
        • 2012-05-26
        • 2022-01-24
        • 1970-01-01
        • 2011-01-14
        • 2012-08-19
        • 2011-11-09
        • 1970-01-01
        • 2022-10-03
        • 1970-01-01
        相关资源
        最近更新 更多