如何在 ASP.NET MVC 身份 2 中使用事务?

How to use Transactions in ASP.NET MVC identity 2?

在我的 ASP.NET MVC5 Identity 2 应用程序中尝试使用事务,但它不是 working.please 请参阅下面的代码,事务不是 working.If var saveteacher = _teacherService.Create(aTeacher); 没有插入成功然后AspNetUsers 未从数据库回滚。

代码:

using (var  dataContext = new SchoolMSDbContext())
{
  using (var trans = dataContext.Database.BeginTransaction(IsolationLevel.ReadCommitted))
  {
    try
    {
      var adminresult =await UserManager.CreateAsync(user, teacherViewModel.Password);
      if (adminresult.Succeeded)
      {
        aTeacher.Id = user.Id;
        var saveteacher = _teacherService.Create(aTeacher);
      }
      else
      {
        trans.Rollback();
        ModelState.AddModelError("", adminresult.Errors.First());
        return View();
      }
      trans.Commit();
    }
    catch (Exception ex)
    {
      trans.Rollback();
      Console.WriteLine(ex.InnerException);
    }
  }
}

我认为问题可能出在异步方面。

尝试像这样创建交易:

TransactionScope transaction = new TransactionScope(System.Transactions.TransactionScopeAsyncFlowOption.Enabled);

(您必须在参考文献中添加 System.Transactions)。

提交事务去transaction.Complete()回滚做transaction.Dispose()

问题在于,当您应该从 HttpContext 获取现有实例时,您正在创建 SchoolMSDbContext 的新实例。

示例:

using (var  dataContext = HttpContext.GetOwinContext().Get<ApplicationDbContext>())
    {
      //...
    }

确保 _teacherServiceUserManager 使用相同的数据库上下文。无需创建 TransactionScope。