Я пытаюсь вложить 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();
}
}
}
Я не могу использовать опции Suppress или RequiresNew, поскольку Trn B полагается на данные, вставленные Trn A. Если я использую эти параметры, Trn B блокируется Trn A.
Любые идеи о том, как я могу заставить его работать, или если это возможно даже с использованием пространства имен System.Transactions?
Спасибо