#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
не фиксируется. Однако эта функция считается чувствительной к безопасности и, следовательно, не может использоваться в среде среднего уровня доверия.