ADO.Net Entity Framework : (二) 實現 with(nolock) 查詢

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 類別

ObjectContext..::.Connection 屬性




 


 

  • 如果您覺得這篇文章有幫助,請您幫忙推薦一下或按上方的""給予支持,非常感激
  • 歡迎轉載,但請註明出處
  • 文章內容多是自己找資料學習到的心得,如有不詳盡或錯誤的地方,請多多指教,謝謝