我對實體框架的理解是,如果它可以從它的緩存中回答查詢,它會。我簡單的測試結果則顯示,重複的查詢訪問數據庫,即使他們之前得到的答覆肯定:做Linq實體查詢*總是*命中數據庫?
var u1 = context.Users.SingleOrDefault(u => u.Id == 1);
var u2 = context.Users.SingleOrDefault(u => u.Id == 1);
這些查詢都是成功的。對於每一個,我在SQL Profiler中看到一個SELECT TOP (2)
。
爲什麼EF轉到數據庫進行第二次查詢?
這是美中不足的蒼蠅。感謝您的信息,並鏈接到解決方案! – ladenedge 2010-10-11 15:32:38
這並非完全正確。我認爲你會混淆EF和L2E。 LINQ to Entities默認不使用緩存,但EF *在其上下文中緩存物化實例。嘗試,例如,'ObjectContext.GetObjectByKey' – 2010-10-11 16:09:00
@Craig Stuntz我的意思是透明的緩存(就像凝固意味着什麼)。 – Andrey 2010-10-11 17:15:42