本文對比 Entity Framework 中三種查詢單個實體的方式:LINQ to Entities、Entity SQL、EntityKey。測試環境:Northwind 資料庫,查詢 CustomerID 為 "ALFKI" 的客戶,循環 1000 次計時。
var data = (from c in context.Customers where c.CustomerID == "ALFKI" select c).FirstOrDefault();
耗時:約 6.2 秒
var data = context.Customers.Where("it.CustomerID=@Id", new ObjectParameter("Id", "ALFKI")).FirstOrDefault();
耗時:約 6.2 秒
var data = context.GetObjectByKey(new EntityKey("NorthwindEntities.Customers", "CustomerID", "ALFKI")) as Customers;
耗時:約 1 秒
前兩者每次皆查資料庫,1000 次耗時相同。EntityKey 僅第一次查資料庫,後 999 次從 Context 透過主鍵直接取物件,速度快數倍。EF 4.0 前實體含外鍵引用自動生成物件引用,EF 4.0 新增外鍵 ID,便於透過外鍵查詢。
先查出所有 CustomerID,再逐一查詢。
耗時:約 0.68 秒
耗時:約 0.5 秒
耗時:約 0.18 秒
EntityKey 查詢效率顯著優於其他兩種,差距達數倍。日常開發中,若已知實體主鍵,應優先使用主鍵查詢 (GetObjectByKey 或 Find),避免 LINQ/Entity SQL 的查詢計劃開銷。本文未對比存儲過程,但結論明確:主鍵查詢為最高效路徑。