持久化实体框架查询缓存

本文关键字:缓存 查询 框架 实体 持久化 | 更新日期: 2023-09-27 18:24:41

我有一个ASP.NET MVC 5 web应用程序,使用EF 6.1访问我的数据库
我有一些相当复杂的LINQ查询,它们需要长达10秒的编译时间,但随后会在几毫秒内执行。EF确实很好地缓存了这些查询,第二次执行查询时,它会在这几毫秒内返回
但这个缓存并没有持久化,所以每次重新启动应用程序时,都需要重新编译查询,这又需要10秒。

有没有一种方法可以持久化这个查询缓存,使其在应用程序重新启动后幸存下来

持久化实体框架查询缓存

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

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);

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