Откат вложенного / дочернего TransactionScope

Я пытаюсь вложить TransactionScopes (.net 4.0) так же, как вы вкладываете транзакции в SQL Server, однако похоже, что они работают по-другому. Я хочу, чтобы мои дочерние транзакции могли откатываться, если они терпят неудачу, но позволяю родительской транзакции решать, следует ли зафиксировать / откатить всю операцию. Проблема в том, что когда происходит первое завершение, транзакция откатывается. Я понимаю, что полное это другое, чтобы совершить.

Очень упрощенный пример того, что я пытаюсь сделать:

static void Main(string[] args)
{
    using(var scope = new TransactionScope()) // Trn A
    {
        // Insert Data A

        DoWork(true);
        DoWork(false);

        // Rollback or Commit
    }
}

// This class is a few layers down
static void DoWork(bool fail)
{
    using(var scope = new TransactionScope()) // Trn B
    {
        // Update Data A

        if(!fail)
        {
            scope.Complete();
        }
    }
}

Я не могу использовать параметры «Подавить» или «Требовать нового», поскольку Trn B использует данные, введенные Trn A. Если я использую эти параметры, Trn B блокируется Trn A.

Любые идеи, как я бы заставить его работать, или если это вообще возможно, используя пространство имен System.Transactions?

Спасибо

Ответы на вопрос(1)

Ваш ответ на вопрос