Я пытаюсь добавить промежуточное программное обеспечение, чтобы транзакция начиналась в начале запроса и выполнялась или выполнялась откат в зависимости от ситуации. Это мое промежуточное ПО:
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 () в настоящее время не выполняется откат. Я пытаюсь реализовать Единицу работы для каждого веб-запроса.
Заранее спасибо.