2016-05-16 11 views
3

Wie wird eine Transaktion in Entity Framework 7 zurückgesetzt?Entity Framework 7 Rollback-Methode

In der alten Version haben wir

  try 
      { 
       dataContext.ChangeTracker.DetectChanges(); 
       dataContext.SaveChanges(); 
      } 
      catch (Exception e) 
      { 
       dataContext.Database.CurrentTransaction.Rollback(); 
       Debug.WriteLine(e.Message); 
      } 

Jetzt

"EntityFramework.Commands" Ich verwende: "7.0.0-rc1-final"

Es spielt keine Ich habe die Methode nicht.

+3

Aber Savechanges läuft bereits in der Transaktion unter der Decke. Wenn SaveChanges fehlschlägt, wird die Transaktion zurückgesetzt. – Evk

+0

@Evk, in alten EF, hat 'SaveChanges' Transaktionsfehler abgedeckt. Wenn ja, warum wurde die Rollback-Methode erfunden? –

+6

Ja, soweit ich weiß war es immer in Transaktion verpackt. Warum gibt es Rollback - Sie können die Transaktion explizit über dataContext.Database.BeginTransaction() starten. Dann können Sie beispielsweise SaveChanges mehrmals aufrufen. Wenn Sie das zurücksetzen möchten, müssen Sie Rollback aufrufen. – Evk

Antwort

4

Die empfohlene Transaktionsmuster in 7.0.0-rc1-final ist das gleiche wie in EF6:

using (var transaction = context.Database.BeginTransaction()) 
{ 
    try 
    { 
     /*do something*/ 
     context.SaveChanges(); 

     transaction.Commit(); 
    } 
    catch (Exception ex) 
    { 
     transaction.Rollback(); 
    } 
} 

Auch EF7 bietet async API (EF6 nicht):

using (var transaction = await context.Database.BeginTransactionAsync()) 
+1

Derzeit [Docs] (https://docs.microsoft.com/en-us/ef/core/saving/transactions) sagt "Transaktion wird automatisch zurückgesetzt, wenn entsorgt wird, wenn einer der Befehle fehlschlägt" – smg

Verwandte Themen