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

Naz*_*ain 7 asp.net asp.net-mvc identity asp.net-identity

在我的ASP.NET MVC5身份2应用程序尝试使用事务,但它不工作.请看下面的代码事务不工作.如果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);
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

tra*_*max 7

我认为问题可能在于异步.

尝试创建这样的事务:

TransactionScope transaction = new TransactionScope(System.Transactions.TransactionScopeAsyncFlowOption.Enabled);
Run Code Online (Sandbox Code Playgroud)

(你必须添加System.Transactions)参考.

要提交事务,请transaction.Complete()转到rollback transaction.Dispose().

  • 默认情况下,标识在异步中.而sync方法只是异步代码的包装器.因此,如果您在顶部添加事务,异步性质就会出现. (2认同)