使用ADO.Net Entity Framework 時的 with(nolock) 查詢

在公司時前輩們指導在執行資料查詢時使用with(nolock),來優化與提升查詢效能(當然也要看是在做哪種查詢...不是盲目使用),

這裡是因為在使用Entity Framework時突然不知道要怎麼寫,於是Google了一下,就順便紀錄下來方便以後忘了可以查詢...

在公司時前輩們指導在執行資料查詢時使用with(nolock),來優化查詢效能(當然也要看是在做哪種查詢...不是盲目使用),

這裡是因為在使用Entity Framework時突然不知道要怎麼寫,於是Google了一下,就順便紀錄下來方便以後忘了可以查詢,

以下文章轉載於這篇http://www.dotblogs.com.tw/asdtey/archive/2009/09/27/10793.aspx

裡面寫的滿清楚的,還提供多種方法:

(以下三種方法我使用的是第一種,需要注意的是在引用System.Transactions時,參考是需要先自行加入才能引用!)

方法一   使用 TransactionScope
 
01 ////示範: with(nolock)查詢
02 using (TestEntities te = new TestEntities())
03 {
04     ////方法一
05     ////須引用 System.Transactions
06     using (TransactionScope ts = new TransactionScope(TransactionScopeOption.Required
07         new TransactionOptions() { IsolationLevel = IsolationLevel.ReadUncommitted }))
08     {
09         var users = te.User.Select(a => a).ToList();
10     }
11 }
需注意此方法在跨資料庫查詢時,啟動MSDTC,並降低效能。
 
方法二  使用 ObjectContext.Connection.BeginTransaction
1 ////示範: with(nolock)查詢
2 using (TestEntities te = new TestEntities())
3 {
4     ////方法二
5     ////此方法會修改所有操作的交易層級
6     te.Connection.BeginTransaction(System.Data.IsolationLevel.ReadUncommitted);
7     var users = te.User.Select(a => a).ToList();
8 }
 
需注意此方法會修改所有操作的交易層級
 
方法三  使用預存程序(stored procedures ),將查詢語法包裝在裡面