ADO.Net Entity Framework : (二) 實現 with(nolock) 查詢
因為公司的案子在執行資料查詢時,都習慣在查詢語法裡使用With(nolock),
用以提升查詢效率與避免LOCK發生,如下
select * from [User] with(nolock)
剛好之前在使用Entity Framework時,也有這個需求,
因此找了一下資料
要在 Linq to SQL 或 Entity Framework 下實現 with(nolock) 查詢方法如下
方法一 使用 TransactionScope
////示範: with(nolock)查詢
using (TestEntities te = new TestEntities())
{
////方法一
////須引用 System.Transactions
using (TransactionScope ts = new TransactionScope(TransactionScopeOption.Required
, new TransactionOptions() { IsolationLevel = IsolationLevel.ReadUncommitted }))
{
var users = te.User.Select(a => a).ToList();
}
}
需注意此方法在跨資料庫查詢時,啟動MSDTC,並降低效能。
方法二 使用 ObjectContext.Connection.BeginTransaction
////示範: with(nolock)查詢
using (TestEntities te = new TestEntities())
{
////方法二
////此方法會修改所有操作的交易層級
te.Connection.BeginTransaction(System.Data.IsolationLevel.ReadUncommitted);
var users = te.User.Select(a => a).ToList();
}
需注意此方法會修改所有操作的交易層級
方法三 使用預存程序(stored procedures ),將查詢語法包裝在裡面
提供一些心得給大家參考
參考資料
Implementing NOLOCK with LINQ to SQL and LINQ to Entities
ObjectContext..::.Connection 屬性
- 如果您覺得這篇文章有幫助,請您幫忙推薦一下或按上方的"讚"給予支持,非常感激
- 歡迎轉載,但請註明出處
- 文章內容多是自己找資料學習到的心得,如有不詳盡或錯誤的地方,請多多指教,謝謝