Ich habe schon viel gesucht, konnte aber kein direktes Problem finden.
Ich habe zwei gespeicherte Prozeduren und beide wurden in das DBContext-Objekt
importiertIch 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
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 .
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%Tags und Links .net sql-server c# entity-framework entity-framework-4