нахождение параметра TransactionScopeOption родительской области транзакций в дочерней области транзакций

#transactionscope

#transactionscope

Вопрос:

В родительской области транзакций у меня есть параметр TransactionScopeOption Required .

Позже во внутренней области транзакций мне нужно проверить TransactionScopeOption родительской области транзакций.

Как это возможно..

Пример

 Parent : using (TransactionScope transactionScopeParent = new TransactionScope(TransactionScopeOption.Required, transactionOptions))
{
....
method()
}

method()
{
here i need to check the TransactionScopeOption of this transaction scope's parent one and then set this transaction scope to be having the same TransactionScopeOption.

using (TransactionScope transactionScopeChild = new TransactionScope(TransactionScopeOption.Required, transactionOptions))
}
  

возможно ли это.

Ответ №1:

Это не требуется.

Если «родительский» TransactionScope является Required , вложенный уже будет зарегистрирован в транзакциях.

Если это не так, вложенный параметр автоматически не станет «обязательным».

Единственным исключением является то, что вы явно задаете вложенное TransactionScope значение RequiresNew , когда будет запущена новая транзакция.

Комментарии:

1. Пожалуйста, обратите внимание, что мое использование заключается в том, что для внутренней транзакции по suppress умолчанию будет установлен параметр TransactionScope, но когда есть родительский transactionscope, тогда мне нужно изменить это suppress , чтобы оно было встроено в родительский transactionscope. пожалуйста, подтвердите

2. @saravanan — Если вы подавите внутреннюю транзакцию, она не будет участвовать в транзакции. Возможно, вам следует создать две версии вашей функции — одну, подавляющую транзакции, а другую нет.

3. На самом деле я должен использовать эту функцию для транзакций MySQL и SQL. В случае SQL я разрешу дочерней транзакции участвовать в родительской транзакции. В случае MySQL это будет в подавленной транзакции, поскольку MySQL не поддерживает распределенные транзакции.

Ответ №2:

Судя по вашим комментариям к ответу @ Oded, вы, похоже, хотите

  • Подключения MS SQL для участия в System.Transactions.Transaction s
  • соединения MySQL, которые не участвуют

Чтобы получить такое поведение, вам просто нужно добавить

Автоматический список=False;

к вашей строке подключения к MySQL:

Если AutoEnlist установлено значение true , которое является значением по умолчанию, соединение, открытое с помощью TransactionScope , участвует в этой области, оно фиксируется, когда область фиксируется, и откатывается, если TransactionScope не фиксируется. Однако эта функция считается чувствительной к безопасности и, следовательно, не может использоваться в среде среднего уровня доверия.