使用存储库模式实体框架缓存

问题描述:

如果我想在使用存储库模式和实体框架时实现缓存,是不是我只是在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

我更喜欢我的存储库是干净的。如果需要,我更喜欢在我的服务层中实施缓存。

所以我100%同意您的样品。您的存储库返回产品(通过运行查询),您可以在其他层中将缓存或不存储

P.S .:我假设你在需要时启动对象上下文(会话开始)并在会话结束时处理它。

+0

缓存实体不适用于ASP.Net中的延迟加载,因为实体所连接的DbContext或ObjectContext只要请求结束就会处理。 – mohas 2014-09-06 09:27:25

+0

@mohas是的。如果您缓存实体,则延迟加载不是一个选项。 – 2014-09-07 04:56:49

最好是兑现整个ObjectContext这就是(存储库)。

分别使用Session_StartSession_End来初始化和处理对象。