1

我有一个使用 EntityFramework 6 运行的 MVC 5 应用程序。

页面上将是根据用户查询返回的搜索结果。数据没有更新那个问题,如果搜索结果被缓存,这不会是一个问题。

我正在使用统一的实体框架上下文的依赖注入。它在默认情况下在每个控制器上提供一个新实例(因此在每个请求上)。

如何缓存搜索结果?

我应该改变这样在每个控制器上都没有返回新的上下文并让实体框架缓存对象吗?

我可以在 MVC 中启用一些缓存并保留它吗?

4

1 回答 1

1

看看实体框架扩展的 nuget 包。我们将它用于缓存 EF 查询。虽然我们使用的是 EF5。如果它不起作用,则可能只是获取其源并调整一些命名空间的情况

或者,只需手动缓存您的 EF 结果(确保通过枚举列表将其完全加载)。要么在不过滤的情况下缓存它(如果你有很大的可变性),要么缓存过滤后的版本,然后将其缓存在 HTTP 缓存中。还可以创建一个为您获取数据的查询服务。可以在查询服务中缓存数据,或者如果您想要更简洁的代码,您可以使用装饰器来包装查询服务以提供缓存版本

您的每个请求的上下文是正确的设置。每个请求都应该有一个新的上下文。不要试图拥有一个长期存在的环境,它会给你带来无穷无尽的麻烦。

还可以启用 MVC 的页面级输出缓存(并确保根据传递的参数进行缓存)但是您的里程可能会因参数的数量和范围而异

于 2013-09-19T21:40:33.090 回答