每个请求的事务中间件不工作

eiee3dmh  于 2021-06-16  发布在  Mysql
关注(0)|答案(0)|浏览(304)

我正在尝试添加一个中间件,以便事务从请求的开头开始,并根据情况提交或回滚。这是我的中间件:

public class TransactionPerRequestMiddleware
    {
      private readonly RequestDelegate next_;

      public TransactionPerRequestMiddleware(RequestDelegate next)
      {
        next_ = next;
      }

      public async Task Invoke(HttpContext context, AppDbContext dbContext)
       {
        var is_everything_ok = true;
        var transaction = dbContext.Database.BeginTransaction(
            System.Data.IsolationLevel.ReadCommitted);
        if (context.Response.StatusCode != 200 && is_everything_ok)
        {
            is_everything_ok = false;
        }

        await next_.Invoke(context);

        if ((context.Response.StatusCode == 200 || 
         context.Response.StatusCode == 302) && is_everything_ok)
        {
            transaction.Commit();
        }
        else
        {
            transaction.Rollback();
        }
      }
    }

我在startup.cs中注册了上述中间件

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
      app.UseMiddleware<TransactionPerRequestMiddleware>();
    }

我在服务中有一个方法,它一个接一个地执行两个数据库操作。

public void method()
    {
      databaseOperation1();
      databaseOperation2();
    }

如果databaseoperation2()中发生异常,则databaseoperation1()当前未回滚。我正在尝试为每个web请求实现工作单元。
提前谢谢。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题