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



在我的 ASP.NET 中,MVC5 Identity 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);
    }
  }
}

我认为问题可能出在异步的东西上。

尝试创建如下所示的事务:

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

(您必须将 System.Transactions ) 添加到引用中。

要提交事务,请transaction.Complete()回滚执行transaction.Dispose()

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

例:

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

确保_teacherServiceUserManager使用相同的数据库上下文。无需创建事务范围。

相关内容

  • 没有找到相关文章

最新更新