о вложенной транзакции, внешняя область дает мне исключение Транзакция была прервана, но внутренняя область успешно возвращается

У меня проблема с проводкой, нужна ваша помощь. У меня есть вложенные транзакции. Внешний метод вызывает внутренний метод SaveChangesToSource, который открывает другую область транзакции. На самом деле я знаю, что у моего базового sql могут быть проблемы. Чего я не могу понять, так это того, почему моя внутренняя транзакция завершилась успешно, и похоже, что исключение было отложено до тех пор, пока я не вызову внешнее Coop.Complete??

using (TransactionScope scope = new TransactionScope())
{
      SaveChangesToSource(changes);
      scope.Complete();
}


protected override void SaveChangesToSource(IEnumerable<IChange> changes)
{
    using (TransactionScope scope = new TransactionScope())
    {            
         _bl.SaveChanges(changes);
         scope.Complete();
    }
}

person user3033715    schedule 07.04.2015    source источник


Ответы (1)


В документации MS говорится, что Изменения, внесенные во вложенную транзакцию, невидимы для транзакции верхнего уровня до тех пор, пока вложенная транзакция не будет зафиксирована, и что даже в этом случае изменения не видны вне транзакции верхнего уровня, пока эта транзакция не будет зафиксирована. ИМХО, и если я правильно это интерпретирую, то сбой вашей внешней транзакции вызовет откат вашей успешной внутренней транзакции.

person Fernando Soteras    schedule 07.04.2015
comment
Я чувствую, что ты прав. В моем сценарии это похоже на то, что внутренняя транзакция не сообщает об ошибке, пока вы не вызовете external scope.complete.. Откат внешней области всего этого... - person user3033715; 08.04.2015