EF6 事务子实体在使用 UoW 模式回滚后仍然更新和删除

问题描述 投票:0回答:0

我在使用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);
c# inheritance entity-framework-6 rollback
© www.soinside.com 2019 - 2024. All rights reserved.