Frage

Wir können SQL verwenden wie folgt aus:

SELECT * FROM student WITH(NOLOCK);

Wie kann ich erreichen dies mit LINQ ohne die Verwendung eines TransactionScope SQL?

War es hilfreich?

Lösung

LINQ to SQL hat keinen Mechanismus, dies zu tun, aber Sie können eine Transaktion mit einer bestimmten Isolationsstufe erstellen. Schauen Sie sich den folgenden Code:

using (var con = new SqlConnection("constr"))
{
    con.Open();

    using (var transaction = con.BeginTransaction(
        IsolationLevel.ReadUncommitted))
    {
        using (var context = new SchoolDataContext(con))
        {
            // HACK: Setting the context.Transaction is 
            // needed in .NET 3.5 (fixed in .NET 4.0).
            context.Transaction = transaction;
            var q = from s in context.Students select c;
        }
    }
}

Manchmal diese Art der Isolierung verwendet, ist sinnvoll, das heißt aus Leistungsgründen. Aber stellen Sie sicher, Sie nicht tun erstellen jeder, aktualisieren oder löschen (CUD) Operationen mit dieser Art von Datenbank Isolation. Es hängt natürlich von Ihrer Situation, aber Ihre Daten könnten in einem inkonsistenten Zustand erhalten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top