我正在使用包装在 TransactionScope 中的 LINQ select 语句(以更改锁定),但根据 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 为我的 select 语句显示 BatchStarting 和 BatchComplete。但它显示 RPC:已完成。为什么?当我运行此代码时:
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 确认我的隔离级别是否正确?我只能通过审核登录查看初始连接的隔离级别。不显示“更新”以表明它已更改或每个查询使用的每个隔离级别。
任何帮助都会很棒!
此外,此代码在连接到 SQL Server 2008 的 WCF (3.5) 服务中运行