saveChanges() 失败时重新使用事务 + EF

Re-use transaction when saveChanges() fail + EF

万一 context.savechanges() 失败,事务内数据库状态和事务状态会是什么。我可以重用同一个事务但创建一个新的上下文吗?

// Should the retry be at this level in case saveChanges() fail.
    using(var transaction = new TransactionScope())
    {
    // retry at this level in case saveChanges() fail. Use the ambient transaction?
      using(var context = new DbContext)
      {
      //do some update and encounter exception (e.g., concurrency exception.)
      context.saveChanges();
      }
    transaction.Complete();
    }

What would within-transaction db state and transaction-state be in case context.savechanges() fails. Can I reuse the same transaction but create a new context?

确切的行为是特定于提供者和特定于错误的。但一般的答案是失败可能会毁掉整个事务,甚至 DbContext,因此您不能在事务中任意失败后重试。

它可能适用于并发异常或其他特定故障,但您需要将它们作为特殊情况进行测试和处理。