我需要帮助实现相当复杂的业务逻辑,这些业务逻辑在很多表上运行,并执行不少SQL命令。不过,我想确保数据不会处于无效状态,而现在我看不到需要嵌套事务的解决方案。我写了一个简单的伪代码说明了类似于什么我要完成一个场景:LINQ to 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失败,所有操作动作(I),从而成功回滚?请注意,我也希望能够忽略单个操作(i)的故障。
是否有可能通过使用嵌套的TransactionScope对象来实现这一点,如果不是 - 您将如何处理这样的问题?