我在使用EF6事务回滚时遇到问题: 当抛出异常并执行回滚函数时,回滚对moneyTransaction进行undo删除和更新并成功恢复数据,但Splits rows(子实体)仍然被删除或更新! 我在 UoW.cs 类中有这段代码:
public bool Save()
{
var saved = _context.SaveChanges();
transaction.Commit();
return saved > 0;
}
public void BeginTransaction()
{
transaction = _context.Database.BeginTransaction();
}
public void Rollback()
{
transaction.Rollback();
}
以及 PaymentController.cs 类中的代码:
try
{
uow.BeginTransaction();
var moneyTransaction = uow.MoneyTransactions.GetById(id);
var log = new LogRecord(LogRecordType.Delete)
{
TransId = moneyTransaction.Id,
TransType = moneyTransaction.Type,
Data1 = moneyTransaction.Splits[0].Account.ToString(),
Data2 = moneyTransaction.Splits[1].Account.ToString(),
Notes = moneyTransaction.Notes,
};
//---
uow.LogRecords.Add(log);
//---
uow.MoneyTransactions.Delete(id);
uow.Save();
}
catch (Exception ex)
{
uow.Rollback();
throw ex;
}
我注意到,当删除这一行时,问题停止了,但我使用 UoW 对每个事务执行多个操作,因此删除这一行会给我带来另一个问题:
uow.LogRecords.Add(log);