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

.net 使用存储库模式的实体框架缓存,.net,caching,frameworks,entity,.net,Caching,Frameworks,Entity,如果我想在使用存储库模式和实体框架时实现缓存,难道我不能在实体框架之外执行一些简单的逻辑来处理缓存吗 例如 似乎很多人都把这件事复杂化了。还是这样做会在某种程度上受到限制?最好将整个ObjectContext变现,这就是存储库 使用Session\u Start和Session\u End分别初始化和处置对象。我希望我的存储库是干净的。如果需要,我更喜欢在我的服务层中实现缓存 所以我100%同意你的样品。存储库返回产品(通过运行查询),您可以在其他层中缓存或不缓存产品 注:我假设您在需要时启动对

如果我想在使用存储库模式和实体框架时实现缓存,难道我不能在实体框架之外执行一些简单的逻辑来处理缓存吗

例如


似乎很多人都把这件事复杂化了。还是这样做会在某种程度上受到限制?

最好将整个
ObjectContext
变现,这就是存储库


使用
Session\u Start
Session\u End
分别初始化和处置对象。

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

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


注:我假设您在需要时启动对象上下文(会话开始),并在会话结束时进行处理。

实体框架已经包含标识映射,用于缓存对象的本地副本。其次,您可以将所有对象简单地视为一个列表,并将其存储在任何字典中。你必须更具体地说明你到底在寻找什么,你给出的例子没有问题,只要你只是想显示项目。看看@Akash,那么真的没有必要进行缓存吗?是的,只要你的对象上下文是活动的,所有子项都缓存在其中。缓存实体不适用于ASP.Net中的延迟加载,因为该实体所附加的DbContext或ObjectContext将在请求结束后立即被释放。@mohas yes。如果缓存实体,则延迟加载不是一个选项。
if(Cache[ProductsKey] != null)
{
    return ConvertToProducts(Cache[ProductsKey]);
}
else
{
    var products = repository.Products;
    Cache[ProductsKey] =  products;
    return products;
}