.NET-Optionen für Transaktionskopien

8

Ich bin ein Neuling in C #. Also habe ich mich nur gefragt, ob jemand mir helfen kann, herauszufinden, wie C # mit transactionscope funktioniert? Weil ich durch die Definition etwas verwirrt bin. Lassen Sie mich jedoch ein wenig über mein Problem erklären. Damit Sie wissen, was ich erreichen möchte.

Ich habe drei Tabellenadapter für drei verschiedene Datensätze deklariert:

%Vor%

Der Prozess zum Importieren von Daten ist:

  1. Zuerst füge ich einen Protokolleintrag über die logAdap.insert () Methode ein.
  2. Durchlaufen Sie eine Excel-Datei, um die Messungen zu erfassen, und starten Sie das Einfügen über die Methode measAdap.insert ().
  3. Bei jeder Messung füge ich Werte über die valueAdap.insert () -Methode ein.

Also meine Frage ist - seit Messung & amp; Wert hat eine verschachtelte Beziehung. Wie kann ich einen verschachtelten Transaktionsbereich & amp; Wenn irgendwo ein Fehler auftritt (Messung einfügen / Wert einfügen) möchte ich nur alles zurücksetzen, was ich getan habe. Das ist, ich möchte nur zu dem Punkt zurückgehen, bevor ich den Protokolleintrag eingefügt habe.

    
Mystic 28.02.2011, 20:08
quelle

3 Antworten

2

Zitieren dieses treffend benannte Artikels: Die definitive TableAdapters + Blogpost zu Transaktionen

  

Wenn Sie mit mehreren Operationen innerhalb eines TransactionScopes arbeiten, dh "GetData" und "Update" in einem TransactionScope oder zwei Updates in einem TransactionScope, öffnen Sie effektiv zwei SqlConnections für die einzelne Datenbank und werten sie unnötig auf die Transaktion von LTM zu MSDTC. Als beste Vorgehensweise wird IMMER nur eine einzelne Operation innerhalb eines TransactionScope umbrochen. Wenn Sie mehrere Operationen in ein einzelnes TransactionScope einschließen möchten, müssen Sie in diesem Fall die Verbindungslebensdauer selbst verwalten, indem Sie die partielle Klassendefinition erweitern. Mit anderen Worten, der folgende Code bewirkt, dass die Transaktion hochgestuft wird -

%Vor%
  

Aber der folgende Code ist in Ordnung -

%Vor%

Sie brauchen also nur ein TransactionScope , aber mit einigen Vorbehalten. Hier ist der Kern, aber ich ermutige Sie, den Blog-Post zu lesen.

TableAdapters sind nicht die am besten geeignete Datenzugriffsmethodik für Transaktionssysteme mit hoher Integrität. Wenn Sie mehr Zuverlässigkeit benötigen, sollten Sie Ihre Operation wahrscheinlich als gespeicherte Prozedur schreiben und aus Ihrem C # -Code ausführen.

    
jevakallio 28.02.2011 20:18
quelle
0

Sie brauchen nicht mehr als ein TransactionScope, Sie können alles in dem gleichen tun, denke ich.

    
Davide Piras 28.02.2011 20:11
quelle
0

Da ich glaube, dass Sie nach dem TransactonScope gesucht haben, sehen Sie, wie Ihr Code aussehen würde, indem Sie ein wenig das Beispiel in Ihrem Kommentar ändern:

%Vor%

Diese Art der Verwendung des Bereichs wird als implizite Transaktionen bezeichnet, und Sie können einen guten Überblick darüber in diesem MSDN-Artikel erhalten: Implementieren einer impliziten Transaktion mithilfe des Transaktionsbereichs .

Nachdem Sie das gesagt haben, ist das, was Fencliff erwähnt, wahr, da Sie wahrscheinlich nicht mehrere Verbindungen für Ihr Szenario öffnen möchten und dadurch wertvolle Datenbankressourcen sparen.

    
Julio Casal 07.03.2011 01:51
quelle

Tags und Links