我需要帮助实现一个复杂的业务逻辑,涉及到多个表格和执行许多SQL命令。然而,我希望确保数据不会留在不一致的状态,并且到目前为止,我没有看到不需要嵌套事务的解决方案。我写了一个简单的伪代码,说明了我想要完成的类似场景:
Dictionary<int, bool> opSucceeded = new Dictionary<int, bool> ();
for (int i = 0; i < 10; i++)
{
try
{
// this operation must be atomic
Operation(dbContext, i);
// commit (?)
opSucceeded[i] = true;
}
catch
{
// ignore
}
}
try
{
// this operation must know which Operation(i) has succeeded;
// it also must be atomic
FinalOperation(dbContext, opSucceeded);
// commit all
}
catch
{
// rollback FinalOperation and operation(i) where opSucceeded[i] == true
}
对我来说最大的问题是:如何确保如果FinalOperation失败,所有成功的操作Operation(i)都被回滚?请注意,我也希望能够忽略单个Operation(i)的失败。
使用嵌套的TransactionScope对象可以实现这一点吗?如果不行,你会怎样解决这个问题?