Wie verwende ich Transaktionen mit dem Entity Framework?

entity-framework transactions

Frage

Wenn Sie Code wie diesen haben:

Something something = new Something();
BlahEntities b = new BlahEntities()    
b.AddToSomethingSet(something);
b.SaveChanges();

Wie wird dieser Zusatz in einer Transaktion ausgeführt?

Akzeptierte Antwort

Sie können Ihren Code in einem Transaktionsbereich platzieren

using(TransactionScope scope = new TransactionScope())
{
    // Your code
    scope.Complete(); //  To commit.
}

TransactionScope befindet sich im Namespace System.Transactions, der sich in der Assembly mit demselben Namen befindet (die Sie möglicherweise manuell zu Ihrem Projekt hinzufügen müssen).


Beliebte Antwort

Der ObjectContext verfügt über eine Verbindungseigenschaft, mit der Sie Transaktionen verwalten können.

using (var context = new BlahEntities())
using (var tx = context.BeginTransaction())
{
    // do db stuff here...
    tx.Commit();
}

Im Ausnahmefall wird die Transaktion zurückgesetzt. Da der Aufruf von BeginTransaction () eine offene Verbindung erfordert, ist es sinnvoll, den Aufruf von BeginTransaction möglicherweise in eine Erweiterungsmethode zu packen.

public static DbTransaction BeginTransaction(this ObjectContext context)
{
    if (context.Connection.State != ConnectionState.Open)
    {
        context.Connection.Open();
    }
    return context.Connection.BeginTransaction();
}

Ein Szenario, in dem ich glaube, dass dieser Ansatz über TransactionScope nützlich sein könnte, ist, wenn Sie auf zwei Datenquellen zugreifen müssen und nur eine Transaktionssteuerung für eine der Verbindungen benötigen. Ich denke, dass in diesem Fall der TransactionScope zu einer verteilten Transaktion befördert wird, die möglicherweise nicht erforderlich ist.



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum