持久化实体框架查询缓存

Chr*_*Fin 5 c# asp.net-mvc caching entity-framework entity-framework-6.1

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

有没有办法坚持这个查询缓存,以便它能够在应用程序重启后幸存下来?

Van*_*ice 0

您可以使用编译查询:请参阅此处此处

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);
Run Code Online (Sandbox Code Playgroud)

但正如这里提到的,查询对象不能超出范围。您可以通过将其缓存在会话中或作为应用程序变量来处理此问题。