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

时间:2015-01-28 09:18:10

标签: asp.net asp.net-mvc asp.net-identity identity

在我的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);
    }
  }
}

2 个答案:

答案 0 :(得分:7)

我认为问题可能出在同步问题上。

尝试创建这样的交易:

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

(您必须添加System.Transactions)参考。

要提交交易,请转发transaction.Complete()以执行transaction.Dispose()

答案 1 :(得分:1)

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

示例:

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