Ich verwende LINQ select-Anweisung in einem TransactionScope (um die Sperrung zu ändern), aber laut SQL Profiler, es scheint nicht zu funktionieren. Mein Code sieht wie folgt aus:
using (var ts = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = IsolationLevel.ReadUncommitted} ))
{
using (myDBDataContext dbPKC = new myDBDataContext(conn))
{
...query...
ts.Complete();
return xmlMachine;
}
}
Jetzt würde ich erwarten, dass SQL Profiler BatchStarting und BatchComplete für meine Select-Anweisung anzeigt. Es wird jedoch RPC:Completed angezeigt. Warum? wenn ich diesen Code ausführe:
using (SqlConnection conn1 = new SqlConnection())
{
conn1.ConnectionString = WebConfigurationManager.ConnectionStrings["myConnectionString"].ToString(); ;
conn1.Open();
using (SqlTransaction trans1 = conn1.BeginTransaction(System.Data.IsolationLevel.ReadUncommitted))
{
SqlCommand cmd = new SqlCommand("select * from Machines where pkID = 5");
cmd.Connection = conn1;
cmd.Transaction = trans1;
SqlDataReader reader = cmd.ExecuteReader(); // just execute something
}
}
Es zeigt BatchStarting und BatchComplete an. Warum scheint LINQ den TransactionScope nicht zu "sehen"?
Gibt es auch eine Möglichkeit zu bestätigen, dass meine Isolationsebene durch Profiler korrekt ist? Ich kann den Isolierungsgrad der ursprünglichen Verbindung nur über Audit Login sehen. Es wird keine "Aktualisierung" angezeigt, um zu zeigen, dass sie geändert wurde oder welche Isolationsebene die einzelnen Abfragen verwenden.
Jede Hilfe wäre wunderbar!
Außerdem wird dieser Code in einem WCF (3.5)-Dienst ausgeführt, der mit SQL Server 2008 verbunden ist