2012-09-12 120 views
1

我最近開始使用EF4.3。實體框架緩存vs Context.Items

我有一些數據,我得到每個請求 - 頁面配置數據是一個例子。我從數據庫中獲取這些數據。

直到最近我一直在Context.items存儲這個,因爲它允許我堅持這個數據貫穿請求。

我現在的問題是,現在我使用EF跟蹤(我使用它在每個請求的基礎上),理論上頁面配置應該緩存時,它是第一次獲取,所以任何後續調用它應該更便宜,儘管可能不能與context.items相比。

這是這種情況還是我錯過了什麼?

回答

1

如果使用ObjectSet/DbSet查詢數據,即使您之前查詢過相同的數據,它也會始終打到數據庫。您必須使用不同的查詢技術才能從緩存項中獲取數據。

如果您使用的是DbContext/DbSet API,則可以使用查詢緩存。

var items = dbContext.Products.Local.Where(/**/); 

ObjectContext

var items = objectContext.ObjectStateManager 
     .GetObjectStateEntries(EntityState.Unchanged | EntityState.Added | EntityState.Modified) 
     .Where(e => e.Entity is Product)....; 
+0

感謝結算,最多的情況。 – dotnetnoob