首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

Entity Framework 進階學習(一):改善 EF 程式碼效能(上)

     編輯:關於ASP.NET

本篇介紹三項基礎但關鍵的 EF 效能優化手段:MergeOption.NoTracking、GetObjectByKey 與 First 的差異。

MergeOption.NoTracking:唯讀查詢加速

預設 EF 會將查詢結果實體放入 ObjectStateManager 追蹤變更。若僅需讀取資料(報表、列表頁),設定 MergeOption.NoTracking 可略過追蹤機制,不載入導航屬性,大幅降低記憶體佔用與查詢延遲。

範例程式碼

[Test]
public void NoTrackingTest() {
  using (var db = new NorthwindEntities1()) {
    db.Customers.MergeOption = MergeOption.NoTracking;
    var cust = db.Customers.Where(c => c.City == "London");
    foreach (var c in cust)
      Console.WriteLine(c.CustomerID);

    // 替代寫法
    // var cust1 = ((ObjectQuery<Customers>)cust).Execute(MergeOption.NoTracking);
    // ESQL 寫法
    // string esql = "select value c from customers as c where c.CustomerID='ALFKI'";
    // db.CreateQuery<Customers>(esql).Execute(MergeOption.NoTracking).FirstOrDefault();
  }
}

GetObjectByKey vs. First

  • GetObjectByKey:先檢查快取,命中則直接回傳;否則查詢資料庫並置入快取。適合依主鍵精確取得單一實體。
  • First / FirstOrDefault:每次皆發送 SQL 查詢資料庫,不經快取。適用於非主鍵條件或需最新資料的情境。

善用 GetObjectByKey 可減少重複主鍵查詢的資料庫往返。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved