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 après sa validation et si la portée externe ne se termine pas.
Réponses
Trop de publicités?Puisqu'ils sont imbriqués, la transaction interne sera annulée.
Ce n'est pas tout et cela dépend de la façon dont vous créez la transaction imbriquée, mais par défaut, elle sera annulée.
Cet article approfondit les TransactionScope
et devrait répondre à la plupart de vos questions.
Être distribué ou non n'a pas d'importance.
Oui, vous pouvez vous référer au code ci-dessous. Le code suivant annulera la portée de la transaction externe si la transaction interne génère une erreur et vice versa.
public bool rootMethod(){
using (var transaction = new(TransactionScopeOption.RequiresNew))
try{
// your code here
SomeController someController = new SomeController();
var responseFromChildMethod = someController.childMethodWithTxn();
// your logic here
transaction.Complete();
return true;
}
catch(Exception ex){
transaction.Dispose();
return false;
}
}
}
SomeController.cs
public bool childMethodWithTxn(){
using(var newTransaction = new TransactionScope()){
try{
//your code here
newTransaction.Complete();
return true;
}
catch(Exception ex){
newTransaction.Dispose();
return false;
}
}
}