使用存储库模式实体框架缓存
如果我想在使用存储库模式和实体框架时实现缓存,是不是我只是在Entity Framework之外做一些简单的逻辑来处理缓存?使用存储库模式实体框架缓存
E.g.
if(Cache[ProductsKey] != null)
{
return ConvertToProducts(Cache[ProductsKey]);
}
else
{
var products = repository.Products;
Cache[ProductsKey] = products;
return products;
}
这似乎是一个很多人都过于复杂这一点。或者这样做会以某种方式限制?
我更喜欢我的存储库是干净的。如果需要,我更喜欢在我的服务层中实施缓存。
所以我100%同意您的样品。您的存储库返回产品(通过运行查询),您可以在其他层中将缓存或不存储。
P.S .:我假设你在需要时启动对象上下文(会话开始)并在会话结束时处理它。
缓存实体不适用于ASP.Net中的延迟加载,因为实体所连接的DbContext或ObjectContext只要请求结束就会处理。 – mohas 2014-09-06 09:27:25
@mohas是的。如果您缓存实体,则延迟加载不是一个选项。 – 2014-09-07 04:56:49
最好是兑现整个ObjectContext
这就是(存储库)。
分别使用Session_Start
和Session_End
来初始化和处理对象。
实体框架已经包含标识映射,缓存对象的本地副本,其次,您可以将所有对象简单地视为列表并将它们存储在任何字典中。您必须更具体地了解您正在寻找什么,只要您要显示项目,您提供的示例就没有问题。 – 2011-04-11 16:06:26
看看[这里](http://msdn.microsoft.com/en-us/library/orm-9780596520281-01-21.aspx) – Homam 2011-04-11 16:16:23
@Aash所以真的没有必要做缓存吗? – Joe 2011-04-11 18:49:05