在我的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);
}
}
}
答案 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>())
{
//...
}