web-dev-qa-db-fra.com

Comment utiliser correctement TransactionScope?

Je veux toujours essayer d'utiliser TransactionScope mais je n'arrive pas à comprendre ce que les gens voient à ce sujet qui est utile. Prenons donc un exemple:

using(TransactionScope tran = new TransactionScope()) {
    CallAMethodThatDoesSomeWork1();
    CallAMethodThatDoesSomeWork2();
    tran.Complete();
}

Donc, la question la plus fondamentale: comment écrire "CallAMethodThatDoesSomeWork1()" pour qu'il sache comment annuler ses actions si disons que "CallAMethodThatDoesSomeWork2()" lève une exception?

34
Denis

Le code des méthodes que vous appelez doit être sensible aux transactions et s'inscrire dans la transaction active. Cela signifie créer ou utiliser des classes qui sont des gestionnaires de ressources (voir Implémenter votre propre gestionnaire de ressources .

Pour ce faire, implémentez IEnlistmentNotification et inscrivez-vous dans la transaction. Une fois la transaction terminée, le gestionnaire de transactions appellera les méthodes définies sur cette interface afin que votre code puisse effectuer/annuler le travail.

22
Trevor Pilley