问题描述
是否可以让 Linq2Sql 在其 SQL 中发出 NOLOCK?如果是这样,如何?
Is it possible to get Linq2Sql to emit a NOLOCK in its SQL? And if so, how?
推荐答案
是的,所以这里是条目 来自我的博客:
Yes it is, so here's the entry from my blog:
NOLOCK 提示本质上是与将查询包装在一个其隔离级别"为设置为读取未提交".它的意思是查询不关心是否有东西正在写入它正在读取的行 - 它会读取脏"数据并将其返回作为结果集的一部分.
事实证明你可以做所有的事情读未提交"事务使用旧的 System.Transactions.NET 2.0 中引入的命名空间.下面是一些示例代码:
Turns out that you can do the whole "read uncommitted" transaction thing using the old System.Transactions namespace introduced in .NET 2.0. Here's some sample code:
using (var txn = new TransactionScope(
TransactionScopeOption.Required,
new TransactionOptions
{
IsolationLevel = IsolationLevel.ReadUncommitted
}
))
{
// Your LINQ to SQL query goes here
}
所以我正在创建一个新的 TransactionScope对象并告诉它使用未提交读隔离级别.这现在在使用"语句中查询就像它的所有表都在阅读一样带有 NOLOCK 提示.
So I'm creating a new TransactionScope object and telling it to use a read-uncommitted isolation level. The query within the "using" statement now acts as if all its tables were reading with the NOLOCK hint.
以下是 Google 搜索linq sql nolock"的第一个结果:
Here are the first results from a Google search for "linq sql nolock":
InfoQ:使用 LINQ to SQL 和 LINQ to Entities 实现 NOLOCK
Matt Hamilton - LINQ to SQL 和 NOLOCK 提示:疯狂道具!
Scott Hanselman 的 Computer Zen - 使用 LINQ to SQL 和 LINQ to ...
这篇关于使用 Linq to SQL 进行 NOLOCK的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!