我想更新一些值,但万一失败,我需要回滚。如何在 asp.net-core-2.0 中执行此操作?
我还没有找到任何答案。这是因为还不支持吗?在这种情况下,有哪些替代方案?
最佳答案
//--INSIDE YOUR SAVE METHOD--
using (var context = new YOURContext())
{
using (var transaction = context.Database.BeginTransaction()) //--Startind transactions
{
try
{
context.YourObject1.Add(new YourObject1 { Url = "http://blogs.msdn.com/dotnet" });
context.SaveChanges();
context.YourObject2.Add(new YourObject2 { Url = "http://blogs.msdn.com/visualstudio" });
context.SaveChanges();
// Commit transaction if all commands succeed, transaction will auto-rollback
// when disposed if either commands fails
transaction.Commit();
}
catch (Exception)
{
// TODO: Handle failure
}
}
}
注意更新,首先恢复对象,然后更新。
//--INSIDE YOU UPDATE METHOD--
...
if (ModelState.IsValid)
{
using (var transaction = _context.Database.BeginTransaction())
{
try
{
var dataYourObj1 = await _context.YourObj1.SingleAsync(x => x.Id == YourObj1.Id);
dataYourObj1.Name = obj1.Name;
dataYourObj1.Email = obj1.Email;
await _context.SaveChangesAsync();
var dataYourObj2 = await _context.YourObj2.SingleAsync(x => x.Id == dataYourObj2.Id);
dataYourObj2.field = obj2.Field;
await _context.SaveChangesAsync();
transaction.Commit();
}
catch (Exception ex)
{
transaction.Rollback();
Console.WriteLine("Error occurred." + ex);
}
return RedirectToAction(nameof(Index));
}
}
关于transactions - 如何在asp.net-core 2.0中进行交易?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46253570/