如何在 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>())
{
//...
}
确保 _teacherService
和 UserManager
使用相同的数据库上下文。无需创建 TransactionScope。
在我的 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>())
{
//...
}
确保 _teacherService
和 UserManager
使用相同的数据库上下文。无需创建 TransactionScope。