У меня есть две области транзакций, одна в другой. Я хотел бы знать, будет ли развернута внутренняя область транзакции после того, как она будет совершена, а внешняя не завершится.
Будет ли внутренняя область транзакции отменена, если внешняя область транзакции не будет завершена?
Ответ 1
Поскольку они вложены, внутренняя транзакция откатится.
Это не вся история и зависит от того, как вы создаете вложенную транзакцию, но по умолчанию она откатится.
Распространение или отсутствие не имеет значения.
Ответ 2
Это зависит от параметра области, с которой вы запускаете область вложенных транзакций.
Если вы используете параметр по умолчанию TransactionScopeOption.Required
, тогда вложенная область будет зачислена в ту же транзакцию, что и внешняя область, и как таковая, когда внешняя область откатывает внутреннюю область, также будет откат, даже если она вызвала Complete
.
Если, однако, вы используете TransactionScopeOption.RequiresNew
, тогда вложенная область начнет свою собственную транзакцию и завершит ее отдельно от внешней области, поэтому она не откатится, даже если внешняя область откатится.
Если вы используете TransactionScopeOption.Suppress
, тогда вложенная область не будет участвовать во внешней транзакции и завершится без транзакции, таким образом, не станет частью работы, которая будет откатна, если внешняя транзакция откатится.