2011-04-11 185 views
6

如果我想在使用存儲庫模式和實體框架時實現緩存,是不是我只是在Entity Framework之外做一些簡單的邏輯來處理緩存?使用存儲庫模式實體框架緩存

E.g.

if(Cache[ProductsKey] != null) 
{ 
    return ConvertToProducts(Cache[ProductsKey]); 
} 
else 
{ 
    var products = repository.Products; 
    Cache[ProductsKey] = products; 
    return products; 
} 

這似乎是一個很多人都過於複雜這一點。或者這樣做會以某種方式限制?

+2

實體框架已經包含標識映射,緩存對象的本地副本,其次,您可以將所有對象簡單地視爲列表並將它們存儲在任何字典中。您必須更具體地瞭解您正在尋找什麼,只要您要顯示項目,您提供的示例就沒有問題。 – 2011-04-11 16:06:26

+0

看看[這裏](http://msdn.microsoft.com/en-us/library/orm-9780596520281-01-21.aspx) – Homam 2011-04-11 16:16:23

+0

@Aash所以真的沒有必要做緩存嗎? – Joe 2011-04-11 18:49:05

回答

4

我更喜歡我的存儲庫是乾淨的。如果需要,我更喜歡在我的服務層中實施緩存。

所以我100%同意您的樣品。您的存儲庫返回產品(通過運行查詢),您可以在其他層中將緩存或不存儲

P.S .:我假設你在需要時啓動對象上下文(會話開始)並在會話結束時處理它。

+0

緩存實體不適用於ASP.Net中的延遲加載,因爲實體所連接的DbContext或ObjectContext只要請求結束就會處理。 – mohas 2014-09-06 09:27:25

+0

@mohas是的。如果您緩存實體,則延遲加載不是一個選項。 – 2014-09-07 04:56:49

4

最好是兌現整個ObjectContext這就是(存儲庫)。

分別使用Session_StartSession_End來初始化和處理對象。