J'ai deux étendues de transaction, l'une dans l'autre. J'aimerais savoir si la portée de la transaction interne sera annulée une fois qu'elle aura été validée et que la portée externe ne sera pas terminée.
Puisqu'ils sont imbriqués, la transaction interne sera annulée.
Ce n'est pas toute l'histoire et dépend de la façon dont vous créez la transaction imbriquée, mais par défaut, elle sera annulée.
Cet article va en profondeur sur TransactionScope
et devrait répondre à la plupart de vos questions.
Être distribué ou non n'est pas pertinent.
Cela dépend de l'option d'étendue avec laquelle vous démarrez l'étendue de la transaction imbriquée.
Si vous utilisez l'option par défaut TransactionScopeOption.Required
alors la portée imbriquée s'inscrira dans la même transaction que la portée extérieure et en tant que telle lorsque la portée extérieure sera annulée, la portée intérieure sera également annulée même si elle a appelé Complete
.
Cependant, si vous utilisez TransactionScopeOption.RequiresNew
, alors la portée imbriquée commencera sa propre transaction et l'achèvera séparément de la portée externe, de sorte qu'elle ne sera pas annulée même si la portée extérieure est annulée.
Si tu utilises TransactionScopeOption.Suppress
alors l'étendue imbriquée ne participera pas à la transaction externe et se terminera de manière non transactionnelle, ne fait donc pas partie du travail qui serait annulé si la transaction externe était annulée.