我需要幫助實現相當複雜的業務邏輯,這些業務邏輯在很多表上運行,並執行不少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對象來實現這一點,如果不是 - 您將如何處理這樣的問題?