Я использую оператор выбора LINQ, завернутый в TransactionScope (для изменения блокировки), но, согласно SQL Profiler, он не работает. Мой код выглядит следующим образом:LINQ и TranscationScope не работают
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 для моего оператора выбора. Но он показывает 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
Почему вы используете область транзакций для запроса? – garik
Ищите УРОВЕНЬ ИЗОЛЯЦИИ SET TRANSACTION – garik
Я использую transactioncope для изменения типа блокировки. Я делаю equiv для оператора выбора nolock. Я использую linq, потому что я делаю инструкцию select и массирую ее в xml в той же строке. (XElement) – BabelFish