如果我想在使用存储库模式和实体框架时实现缓存,我不能只在Entity Framework之外做一些简单的逻辑来处理缓存吗?
E.g。
if(Cache[ProductsKey] != null)
{
return ConvertToProducts(Cache[ProductsKey]);
}
else
{
var products = repository.Products;
Cache[ProductsKey] = products;
return products;
}
似乎很多人都过于复杂了。或者这样做会以某种方式限制?
答案 0 :(得分:4)
最好兑现此处(存储库)的整个ObjectContext
。
使用Session_Start
和Session_End
分别初始化和处置对象。
答案 1 :(得分:4)
我更喜欢我的存储库是干净的。如果需要,我更喜欢在我的服务层实施缓存。
所以我 100%同意你的样本。您的存储库返回产品(通过运行查询),您可以在其他层中缓存。
P.S。:我假设你在需要时开始你的对象上下文(会话开始)并在会话结束时处理它。