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,因此您不能在事务中任意失败后重试。
它可能适用于并发异常或其他特定故障,但您需要将它们作为特殊情况进行测试和处理。
万一 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,因此您不能在事务中任意失败后重试。
它可能适用于并发异常或其他特定故障,但您需要将它们作为特殊情况进行测试和处理。