Понимание TransactionScopeOptions: ТребуетсяНовый = Подавить + Требуется? - PullRequest
13 голосов
/ 09 августа 2011

Мне кажется, я понимаю TransactionScopeOption.Suppress и TransactionScopeOption.Required, но мне трудно понять, что делает TransactionScopeOption.RequiresNew. Основываясь на последнем объяснении, которое я прочитал, будут ли следующие два функциональных блока кода одинаковыми? Это точное представление о том, что означает RequiresNew

using (var ts1 = new TransactionScope(TransactionScopeOption.RequiresNew))
{
  DoStuff();
  ts1.Complete();
}

и

using (var ts2 = new TransactionScope(TransactionScopeOptions.Suppress))
{
  using (var ts3 = new TransactionScope())
  {
    DoStuff();
    ts3.Complete();
  }

  ts2.Complete(); // not required but recommended for consistency's sake
}

1 Ответ

13 голосов
/ 09 августа 2011

Чтобы получить хорошее представление об объемах транзакций, вы можете прочитать эту статью MSDN

Я не могу найти хорошего объяснения, как эти два будут отличаться, за исключением того, что количество создаваемых вложенных областей различно. Оба случая должны привести к одинаковому количеству транзакций независимо от того, существует ли транзакция или нет. Я не могу найти хороший ресурс, на который можно сослаться, но я всегда обращался бы за RequNew вместо комбинированного Suppress / Required. «Требуется новое» в основном означает: «независимо от того, есть ли уже транзакция или нет, дайте мне новую».

Обновление: Если первая ссылка не работает, вы можете найти ее в архиве обратной связи здесь

...