Подтвердить что ты не робот

Будет ли внутренняя область транзакции отменена, если внешняя область транзакции не будет завершена?

У меня есть две области транзакций, одна в другой. Я хотел бы знать, будет ли развернута внутренняя область транзакции после того, как она будет совершена, а внешняя не завершится.

4b9b3361

Ответ 1

Поскольку они вложены, внутренняя транзакция откатится.

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

В этой статье мы подробно расскажем о TransactionScope и должны ответить на большинство ваших вопросов.


Распространение или отсутствие не имеет значения.

Ответ 2

Это зависит от параметра области, с которой вы запускаете область вложенных транзакций.

Если вы используете параметр по умолчанию TransactionScopeOption.Required, тогда вложенная область будет зачислена в ту же транзакцию, что и внешняя область, и как таковая, когда внешняя область откатывает внутреннюю область, также будет откат, даже если она вызвала Complete.

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

Если вы используете TransactionScopeOption.Suppress, тогда вложенная область не будет участвовать во внешней транзакции и завершится без транзакции, таким образом, не станет частью работы, которая будет откатна, если внешняя транзакция откатится.