60 votes

Une portée de transaction interne sera-t-elle annulée si la portée de transaction externe ne se termine pas ?

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.

33voto

Oded Points 271275

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.

0voto

Gaurav Basnet Points 11

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;
           }

  }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X