开发者

How to use SQL Server table hints while using LINQ?

What is the way to use Sql Server's table hints like "NOLOCK" while using LINQ?

For example I can write "SELECT * from employee(NOLOCK)" in SQL.

How can we write the same u开发者_如何学运维sing LINQ?


Here's how you can apply NOLOCK: http://www.hanselman.com/blog/GettingLINQToSQLAndLINQToEntitiesToUseNOLOCK.aspx

(Quote for posterity, all rights reserved by mr scott):

ProductsNewViewData viewData = new ProductsNewViewData();
using (var t = new TransactionScope(TransactionScopeOption.Required,
    new TransactionOptions { 
        IsolationLevel = System.Transactions.IsolationLevel.ReadUncommitted 
    }))
{
   viewData.Suppliers = northwind.Suppliers.ToList();
   viewData.Categories = northwind.Categories.ToList();
}


I STRONGLY recommend reading about SQL Server transaction isolation modes before using ReadUncommitted. Here's a very good read

http://blogs.msdn.com/b/davidlean/archive/2009/04/06/sql-server-nolock-hint-other-poor-ideas.aspx

In many cases level ReadSnapshot should suffice. Also you if You really need it You can set default transaction isolation level for Your database by using

Set Transaction Isolation Level --levelHere

Other good ideas include packaging Your context in a wrapper that encapsulates each call using demanded isolation level. (maybe You need nolock 95% of the time and serializable 5% of the time). It can be done using using extension methods, or normal methods by code like:

viewData.Categories = northwind.Categories.AsReadCommited().ToList();

Which takes your IQueryable and does the trick mentioned by Rob.

Hope it helps Luke

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜