【问题标题】:How to cache result/data sets in EF 4.1?如何在 EF 4.1 中缓存结果/数据集?
【发布时间】:2011-09-24 16:53:33
【问题描述】:
我在 MVC3 应用程序中有一个视图,它调用存储过程(需要一段时间才能执行)来填充视图上的网格并希望以某种方式缓存该数据?不熟悉 EF 缓存,但我实际上想以某种方式在启动时在后台的后台线程上运行查询,以便当用户单击此特定视图(这是用户想要查看的通用数据视图)时结果速度很快,并在 webgrid 中显示为缓存
任何信息将不胜感激。谢谢!
【问题讨论】:
标签:
asp.net-mvc-3
entity-framework-4.1
【解决方案1】:
使用存储库模式来请求您的数据实体。在您的存储库类中,将结果缓存在 MemoryCache(.net 中的一种特定类型的缓存)中。每当您请求对象时,存储库类都知道是否从缓存中获取它,并且调用者不需要知道有关缓存的任何信息。我会先使用代码或 poco 模板,以免从其他依赖项中存储任何包袱。
对于 POCO - 您可以使用 EF POCO 模板或代码优先模型为您提供没有 EF 包袱的 poco 类。
如果您对这些步骤有任何具体的问题,请告诉我,我可以更详细地介绍。
如果您需要在应用程序启动时花一些时间加载它,另一个线程绝对是这样做的方法,因为主线程中任何长时间运行的 Application_start 代码都可能导致死锁。每个用户更基本的方法是将对象放在用户会话中,但这确实取决于您。
如果 EF 框架存在于 ObjectContext 生命周期之外,则没有 EF 缓存作为一部分。
另一种方法是在控制器方法中处理此问题,如下所示:
How to cache mvc3 webgrid results (so that col sort click doesn't?