Entity Framework mit NOLOCK
Wie kann ich die NOLOCK
- Funktion von Entity Framework? XML ist der einzige Weg, dies zu tun?
InformationsquelleAutor der Frage OneSmartGuy | 2009-05-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie kann ich die NOLOCK
- Funktion von Entity Framework? XML ist der einzige Weg, dies zu tun?
InformationsquelleAutor der Frage OneSmartGuy | 2009-05-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nein, aber Sie können starten Sie eine Transaktion und legen Sie die Isolationsstufe read ungebunden. Dies ist im wesentlichen das gleiche wie NOLOCK, aber anstatt es zu tun auf einer basis pro Tabelle, wird Sie es tun für alles, was im Rahmen der Transaktion.
Wenn das klingt wie Sie, was Sie wollen, hier ist, wie Sie gehen über es zu tun...
InformationsquelleAutor der Antwort Doctor Jones
Erweiterung Methoden können diese leichter
InformationsquelleAutor der Antwort Alexandre
Wenn Sie etwas zu groß, der beste Weg, die wir gefunden, die weniger aufdringlich sind, als tatsächlich beginnen, eine transactionscope-jedes mal, ist einfach legen Sie die Standard-Isolationsstufe der Transaktion auf Ihre Verbindung, nachdem Sie erstellt haben Ihre Objekt-Kontext ausführen dieses einfachen Befehls:
http://msdn.microsoft.com/en-us/library/aa259216(v=sql.80).aspx
Mit dieser Technik, waren wir in der Lage, erstellen Sie ein einfaches EF-Anbieter, der schafft den Kontext für uns und eigentlich läuft dieser Befehl jedes mal für alle unsere-Kontext, so dass wir immer im "read uncommitted" standardmäßig.
InformationsquelleAutor der Antwort Frank.Germain
Obwohl ich völlig darin überein, dass die Verwendung von Read Uncommitted-Isolationsstufe ist die beste Wahl, aber einige Zeit, die Sie gezwungen, zu verwenden, NOLOCK-Hinweis durch die Anfrage von manager oder client ist und keine Gründe gegen diese akzeptiert.
Mit Entity Framework 6 implementieren Sie eigene DbCommandInterceptor wie diese:
Mit dieser Klasse, können Sie es auf Anwendung starten:
Und bedingt schalten Sie das hinzufügen von
NOLOCK
Hinweis in Abfragen auf den aktuellen thread:InformationsquelleAutor der Antwort Yuriy Rozhovetskiy
Verbesserung auf Doctor Jones's Antwort akzeptiert und mit PostSharp;
Ersten "ReadUncommitedTransactionScopeAttribute"
Dann, wenn Sie es brauchen,
Hinzufügen Können "NOLOCK" mit einem interceptor ist auch schön, aber wird nicht funktionieren, wenn Sie andere Datenbank-Systeme wie Oracle als solche.
InformationsquelleAutor der Antwort myuce
Um diese erstelle ich einen view auf der Datenbank und gelten NOLOCK auf die Abfrage der Sicht. Ich habe dann behandeln Sie die Ansicht als eine Tabelle in EF.
InformationsquelleAutor der Antwort Ryan Galloway
Nein, nicht wirklich - Entity Framework ist im Grunde eine ziemlich strikte Ebene über Ihrem eigentlichen Datenbank. Ihre Fragen formuliert sind, in ESQL - Entity-SQL - was ist zunächst einmal darauf ausgerichtet, Ihre entity-Modell, und da EF unterstützt mehrere Datenbank-backends, man kann nicht wirklich senden "native" SQL direkt in Ihrem backend installieren.
Den NOLOCK-Abfragehinweis wird eine SQL Server-spezifische Sache und funktioniert nicht auf einem der anderen unterstützten Datenbanken (es sei denn, Sie haben implementiert, die den gleichen Hinweis - was ich stark bezweifle).
Marc
InformationsquelleAutor der Antwort marc_s
Mit der Einführung von EF6, empfiehlt Microsoft die Verwendung BeginTransaction () - Methode.
Können Sie BeginTransaction statt TransactionScope in EF6+ und die EF-Core
InformationsquelleAutor der Antwort Ali
Eine Möglichkeit ist die Verwendung einer gespeicherten Prozedur (ähnlich zu der Ansicht, die vorgeschlagene Lösung von Ryan) und führen Sie dann die gespeicherte Prozedur aus EF. Auf diese Weise die gespeicherte Prozedur führt die dirty read während der EF nur Rohre die Ergebnisse.
InformationsquelleAutor der Antwort Rafiki