Я использую оператор выбора LINQ, заключенный в TransactionScope (для изменения блокировки), но, согласно SQL Profiler, он, похоже, не работает. Мой код выглядит так:
using (var ts = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = IsolationLevel.ReadUncommitted} ))
{
using (myDBDataContext dbPKC = new myDBDataContext(conn))
{
...query...
ts.Complete();
return xmlMachine;
}
}
Теперь я ожидаю, что SQL Profiler покажет BatchStarting и BatchComplete для моего оператора select. Но он показывает RPC: Completed. Почему? когда я запускаю этот код:
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
}
}
Он показывает BatchStarting и BatchComplete. Почему кажется, что LINQ «не видит» TransactionScope?
Также есть способ подтвердить, что мой уровень изоляции правильный с помощью Profiler? Я могу видеть только начальный уровень изоляции соединения через Audit Login. «Обновление» не отображается, чтобы показать, что оно было изменено или какой уровень изоляции используется в каждом запросе.
Любая помощь будет замечательной!
Кроме того, этот код работает в службе WCF (3.5), подключающейся к SQL Server 2008.