我在MVC3应用程序中有一个视图,它调用存储过程(需要一段时间才能执行)来填充视图上的网格,并希望以某种方式缓存该数据?不熟悉EF缓存,但实际上我想以某种方式在启动时在后台运行查询,以便当用户点击此特定视图(这是一个常见的数据视图,usere想要查看)时在webgrid
中显示为快速并缓存为dispalyed任何信息都将不胜感激。谢谢!
答案 0 :(得分:1)
使用存储库模式来请求您的数据实体。在您的存储库类中,将结果缓存在MemoryCache(.net中的特定类型的缓存)中。每当你再请求对象时,存储库类就知道是否从te cache中获取它,并且调用者不需要知道有关缓存的任何信息。我会先使用代码或poco模板,不要从其他依赖项中存储任何行李。
对于POCO - 您可以使用EF POCO模板或代码优先模型为您提供没有EF行李的poco类。 如果您对这些步骤有任何具体的问题,请告诉我,我可以详细介绍。 如果您需要花一些时间在应用程序启动时加载它,另一个线程肯定是这样做的方式,因为主线程中任何长时间运行的Application_start代码都可能导致死锁。每个用户更基本的方法是将对象放在用户会话中,但这确实取决于您。 如果EF框架存在于ObjectContext生命周期之外,则不存在EF缓存。 另一种方法是在控制器方法中处理这个,如下所示: How to cache mvc3 webgrid results (so that col sort click doesn't?