Промежуточное программное обеспечение транзакции по запросу не работает - PullRequest
0 голосов
/ 04 января 2019

Я пытаюсь добавить промежуточное программное обеспечение, чтобы транзакция начиналась в начале запроса и выполнялась или выполнялась откат в зависимости от ситуации. Это мое промежуточное ПО:

    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>();
    }

У меня есть метод в service , который выполняет две операции с базой данных одну за другой.

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

Если исключение возникает в databaseOperation2 () , databaseOperation1 () в настоящее время не выполняется откат. Я пытаюсь реализовать Единицу работы для каждого веб-запроса.

Заранее спасибо.

...