2009-05-12 6 views

Répondre

5

Les avantages de TransactionScope sont:

  • vous ne devez pas passer une transaction autour (ADO.NET doit engager automatiquement)
    • ce qui signifie que vous pouvez même utiliser un TransactionScope ajouter opérations existantes à code source fermé (pas de modifications sont nécessaires)
  • un TransactionScope peut (via DTC) couvrent plusieurs ressources (plusieurs datab Ases, ou une base de données et un serveur MSMQ, etc.)

Mais vous payez pour cela un peu peu avec la vitesse. Une transaction basée sur une connexion est légèrement plus rapide (pas beaucoup), mais ne peut couvrir qu'une seule ressource et doit être attachée manuellement à tout votre code DAL. Toutefois, si vous ne parlez qu'à une seule instance SQL2005/SQL2008, vous pouvez utiliser le "LTM", ce qui signifie qu'il ne doit pas impliquer DTC (d'où provient la plus grande partie des coûts de performance), sauf si cela est absolument nécessaire. De nombreuses opérations TransactionScope peuvent donc terminer de parler uniquement à la base de données.

Si vous souhaitez effectuer 20 opérations, alors TransactionScope devrait être idéal - cela vous évitera d'avoir à faire circuler les transactions, et permettre à chaque opération de gérer localement leur connexion - ce qui rendra le code hautement réutilisable. En effet, TransactionScope peuvent être imbriquées dans les façons dont vous attendez, vous pouvez donc avoir:

void Deposit(...) { /* uses TranScope to do a deposit */ } 
void Debit(...) { /* uses TranScope to do a debit */ } 
void Transfer(...) { /* uses a TranScope to span Debit/Deposit */ } 

Pour ce faire, les transactions de base de données à l'aide que vous auriez besoin de passer la connexion et objets transaction à chaque méthode, qui obtient rapidement ungainly - surtout si vous avez besoin de coder pour travailler avec/sans une transaction ouverte existante (beaucoup de "if(tran==null)" etc.).

Pour plus d'informations, consultez Transactions in .net

+0

Je trouve ce modèle si utile que j'ai construit ma propre structure similaire pour les processus différents. – cjk

Questions connexes