【问题标题】:What options do I have to do a cached searching in my objects with Entity Framework 6我必须使用 Entity Framework 6 在我的对象中进行缓存搜索有哪些选项
【发布时间】:2013-09-25 03:34:46
【问题描述】:

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

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

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

如何缓存搜索结果?

我是否应该改变这样在每个控制器上不返回新上下文并让实体框架缓存对象?

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

【问题讨论】:

  • 关于这个问题你还需要什么?如果回答有帮助,请考虑接受并投票。谢谢
  • 抱歉耽搁了,正忙于其他事情。谢谢
  • 没问题。我需要 3000 代表才能进入下一级别 :)

标签: c# asp.net-mvc entity-framework caching


【解决方案1】:

看看 Entity Framework extended nuget package。我们将它用于缓存 EF 查询。虽然我们使用的是 EF5。如果它不起作用,可能只是获取其源并调整一些命名空间的情况

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

每个请求的上下文都是正确的设置。 Every request should have a new context。不要试图拥有一个长期存在的上下文,它会给你带来无穷无尽的麻烦。

还可以启用 MVC 的页面级输出缓存(并确保您 cache based on parameters passed)但是您的里程可能会因参数的数量和范围而异

【讨论】:

  • 感谢您提供选项链接。明天我会找出最适合我需要的东西。我倾向于 Page lvl 缓存,因为这听起来很简单,现在搜索只是基于一个单词构建的查询。 (简单的简单搜索)。如果需要更复杂的搜索,可能会选择其他选项之一。
  • 如果一个词经常出现相同的情况会有所帮助。这取决于单词的可变性。如果它变化很多,那么缓存数据并用单词过滤。需要帮助请叫我。多年来,以不同的方式使用 EF 完成了大量的缓存。
猜你喜欢
  • 2013-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-31
  • 1970-01-01
  • 2013-01-25
  • 1970-01-01
相关资源
最近更新 更多