gpt4 book ai didi

asp.net - HttpModule中的NHibernate session 和事务管理

转载 作者:行者123 更新时间:2023-12-04 04:36:05 32 4
gpt4 key购买 nike

我已经看到人们在HttpModule中管理其NHibernate session 和事务的网络上的许多实现。

HttpModule:

  • 在请求
  • 的开始处创建一个 session
  • 将整个请求包装在事务
  • 在请求
  • 的末尾提交事务

    如果人们使用此策略,他们将如何处理以下情况:
  • 请求来自
  • 从数据库
  • 中检索对象
  • 更新对象
  • 对象验证失败
  • 由于事务是在HttpModule中提交的,因此对对象的
  • 更改仍然保留。

  • 在上述情况下,似乎没有回滚事务的好方法。我唯一能想到的计划是:
  • 以确保在更新我的域对象之前成功的方式写我的验证(将我的验证从我的域模型中取出)。
  • 使我的交易更接近我的业务逻辑,并抛弃了在HttpModule中透明地进行交易的想法。 (我看过很多推荐的文章)

  • 看到如此多的人似乎正在使用HttpModule方法,我希望有一种我从未想到过的第三种方法来管理这种情况?

    最佳答案

    您可以使用某种全局异常处理。现在我正在使用System.AppDomain.CurrentDomain.UnhandledException。在此处理程序中,您将需要调用Transaction.Rollback();并且考虑设置一些标志(该标志也仅在当前请求中有效)将指示您是否需要提交事务或回滚。这可以使代码更清晰。

    编辑
    另外,您可以使用HttpApplication的Error事件

    public class HelloWorldModule : IHttpModule
    {
    void Init(HttpApplication application)
    {
    application.BeginRequest +=
    (new EventHandler(this.Application_BeginRequest));
    application.EndRequest +=
    (new EventHandler(this.Application_EndRequest));
    //this is it
    applicaiton.Error +=
    (new EventHandler(this.Application_Error));
    }

    关于asp.net - HttpModule中的NHibernate session 和事务管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3739844/

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com