Entity Framework: Wie werden mehrere gespeicherte Prozeduren in eine Transaktion eingefügt?

8

Ich habe schon viel gesucht, konnte aber kein direktes Problem finden.

Ich habe zwei gespeicherte Prozeduren und beide wurden in das DBContext-Objekt

importiert
  1. InsertA ()
  2. EinfügenB ()

Ich möchte sie in eine Transaktion einfügen. (d. h. wenn InsertB () fehlgeschlagen ist, wird InsertA ()) zurückgesetzt.

Wie mache ich das? Kann ich einfach ein TransactionScope-Objekt deklarieren und die beiden gespeicherten Prozeduren umschließen?

Danke

    
c830 25.06.2012, 17:21
quelle

2 Antworten

13

Sie müssen Ihre Operationen wie folgt in einen Transaktionsbereich aufnehmen:

%Vor%

Bei einem Fehler wird der Transaktionsbereich automatisch zurückgesetzt. Natürlich müssen Sie immer noch mit Ausnahmen umgehen und alles tun, was Ihre Ausnahmebehandlung vorschreibt (Protokoll usw.). Wenn Sie jedoch Complete() nicht manuell aufrufen, wird die Transaktion zurückgesetzt, wenn der using -Bereich endet.

Der Transaktionsbereich wird nicht zu einer verteilten Transaktion heraufgestuft, es sei denn, Sie öffnen andere Datenbankverbindungen im selben Transaktionsbereich (siehe hier ).

Dies ist wichtig zu wissen , da Sie sonst MSDTC auf all Ihren Servern, die an dieser Operation beteiligt sind (Web, Middle-Tier, eventuell SQL-Server). Solange die Transaktion nicht auf eine verteilte übertragen wird, geht es Ihnen gut.

Hinweis: Um Ihre Transaktionsoptionen, wie Timeouts und Isolationsstufen, genau abzustimmen, schauen Sie sich this% co_de an % Konstruktor . Standard-Isolationsstufe ist serialisierbar.

Zusätzliches Beispiel: hier .

    
Marcel N. 25.06.2012, 17:28
quelle
4

Sie können das TransactionScope-Objekt verwenden oder die SqlConnection.BeginTransaction-Methode verwenden. Seien Sie vorsichtig bei der Verwendung von TransactionScope, Transaktionen können zu verteilten Transaktionen verarbeitet werden, wenn gespeicherte Prozeduren in einer anderen Datenbank aufgerufen werden. Verteilt Transaktionen können ressourcenintensiv sein.

Wie verwendet man sqlConnection.BeginTransaction ... (http://msdn.microsoft.com/en-us/library/86773566.aspx)

%Vor%

So verwenden Sie TransactionScope ... (http://msdn.microsoft.com/en-us/library/system.transactions.transactionscope.aspx)

%Vor%     
Joe Web 25.06.2012 17:58
quelle