持久化实体框架查询缓存

时间:2014-09-27 09:31:48

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

我有一个ASP.NET MVC 5 Web应用程序,并使用EF 6.1访问我的数据库 我有一些相当复杂的LINQ查询,最多需要10秒才能编译,但之后会在几毫秒内执行。 EF确实缓存了这些查询,第二次执行查询时,它会在几毫秒内返回 但是这个缓存没有持久化,所以在每个应用程序重新启动时,需要重新编译查询,这需要再次使用10秒。

有没有办法可以保留此查询缓存,以便在应用程序重新启动后继续存在?

1 个答案:

答案 0 :(得分:0)

您可以使用已编译的查询:see herehere

static readonly Func<AdventureWorksEntities, Decimal, IQueryable<SalesOrderHeader>> s_compiledQuery2 = 
CompiledQuery.Compile<AdventureWorksEntities, Decimal, IQueryable<SalesOrderHeader>>(
        (ctx, total) => from order in ctx.SalesOrderHeaders
                        where order.TotalDue >= total
                        select order);

但如上所述here,查询对象不得超出范围。您可以通过将其缓存在会话中或作为应用程序变量来处理此问题。