13 Stimmen

TransactionScope vs. IDbTransaction

Was sind die Vor- und Nachteile der Verwendung von TransactionScope im Vergleich zu IDbTransaction? Ich werde einige vorschlagen - bitte korrigieren/ergänzen Sie die Liste.

Vorteile von TransactionScope:

  1. TransactionScope unterstützt verteilte Transaktionen - Sie können auf mehrere Datenquellen zugreifen oder mehrere Verbindungen zu einer Datenquelle innerhalb einer Transaktion verwenden.
  2. TransactionScope ist deklarativer: Wir können TransactionScopes verschachteln und es ist angenehmer, ihn im Service-Layer zu verwenden (wir müssen keine IDbConnection und IDbTransaction selbst verwalten).
  3. Ich bin mir nicht sicher über den dritten Punkt, aber hier ist er. IDbTransaction ist spezifisch für die Verbindung - Sie müssen die Verbindung während der gesamten Transaktion offen halten. Ich bin mir nicht sicher, ob die Verbindung/Verbindungen während des gesamten TransactionScope geöffnet sein sollten (bitte klären Sie das). Wenn nicht, ist der folgende Ablauf möglich: Transaktion starten, Verbindung öffnen - Abfrage - abrufen - Verbindung schließen, ressourcenintensive Berechnung ausführen (Verbindungen geschlossen halten), Verbindung öffnen - Abfrage - abrufen - Verbindung schließen, ..., Transaktion bestätigen. Aber ich denke, es ist unmöglich, dass ein TransactionScope Verbindungen bis zum Commit offen hält.

Nachteile von TransactionScope:

  1. Es unterstützt keine Änderung des IsolationLevels während der Transaktion.

17voto

Marc Gravell Punkte 970173

Bequemlichkeit zählt viel - besonders, da es verwendet werden kann, um Code zu umschließen, den Sie nicht kontrollieren können (da der Code, den Sie umschließen, automatisch aufgelistet wird, standardmäßig). Das bedeutet, dass Sie vorhandene Bibliotheken umschließen können, die den Server verwenden.

Die Leistung nimmt etwas ab, aber beachten Sie, dass Sie in vielen Fällen den leichtgewichtigen Transaktionsmanager und nicht DTC verwenden werden - das bedeutet, dass Sie nicht die vollen DTC-Kosten zahlen.

Ein weiterer Nachteil ist, dass verschachtelte Transaktionen nicht zurückgesetzt werden können; jedes Rücksetzen sofort setzt die äußere Transaktion zurück. Persönlich mag ich diesen Ansatz; wenn die Dinge schief gehen - hören Sie sofort auf, sie zu tun.

Zu Ihrer Anfrage in Punkt 3; Sie können so viele Verbindungen im Transaktionsbereich öffnen/schließen, wie Sie möchten, ohne das Verhalten zu beeinflussen, außer Sie könnten feststellen (abhängig von den Umständen), dass Ihre Transaktion zu DTC eskaliert. Es ist ziemlich sicher, dass sie eskaliert, wenn Sie mit mehreren transaktionsfähigen Servern sprechen.

Ein weiterer Unterschied: Unterschiedliche Zeitlimits gelten, besonders wenn DTC involviert ist. Das macht Sinn: eine lang laufende verteilte Transaktion ist Gift und kann auf einen serverübergreifenden Deadlock hinweisen. Deadlocks werden normalerweise auf einem einzelnen Server erkannt, sind aber praktisch unmöglich automatisch zu erkennen, wenn sie verteilt sind, daher ist ein hartes Zeitlimit unerlässlich.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X