Was fehlt mir?Warum ignoriert Entity Framework TransactionScope (nicht mit NOLOCK hinzufügen)?
Ich versuche, mit NOLOCK mit einer Transaction wie folgt zu lesen:
var scopeOptions = new TransactionOptions { IsolationLevel = IsolationLevel.ReadUncommitted };
using (var scope = new TransactionScope(TransactionScopeOption.Required, scopeOptions))
{
using (var db = new MyDbContext(ConnectionStringEntities))
{
// Simple read with a try catch block...
}
scope.Complete();
}
ich mit NOLOCK zu der SQL-Abfrage hinzugefügt, um zu sehen erwartet (in SQL Profiler und auch eine benutzerdefinierten DbCommandInterceptor - aber es ist nicht da ...
UPDATE: nach etwas mehr Forschung, frage ich mich, ob der ausgewählte Cursor überhaupt verwendet wird, nur ohne den NOLOCK "Hinweis" (SQL Server spezifisch - und auch spezifisch für nur eine Tabelle) Ich habe einen Code gefunden, der die aktuelle Transaktion enthält, und es scheint so zu sein ow die richtige ausgewählte Transaktionsisolations (ReadUncommitted/Serializable etc.) Ich möchte immer noch, es testen, aber lassen Sie mich wissen, wenn Sie irgendwelche Gedanken
Get current .net TransactionScope IsolationLevel
Transaction trans = Transaction.Current;
System.Transactions.IsolationLevel level = trans.IsolationLevel;
LogService.Instance.Debug($"Transaction IsolationLevel = {level.ToString()}");
TransactionScope verwendet, um mit früheren Versionen von EF zu arbeiten (vor etwa 4 Jahren), wissen Sie, ob das in EF6 geändert oder vielleicht ein Fehler? – Yovav
Es funktioniert immer noch, aber es gibt neue API, die Transaktionen wie DbContext.Database.BeginTransaction und DbContext.Database.UseTransaction verarbeiten können. –