我有一个 ASP.NET MVC 5 网络应用程序并使用 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);
但如前所述here查询对象不得超出范围。您可以通过将其缓存在 session 中或作为应用程序变量来处理此问题。
关于c# - 持久 Entity Framework 查询缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26073248/