많은 테이블에서 작동하고 꽤 많은 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 개체를 사용하여이를 달성 할 수 있습니까? 그렇지 않은 경우 어떻게 이러한 문제에 접근합니까?