我有一个Azure Fabric群集,其中包含.NET Core 2.2微服务。提到的服务使用EF核心与Azure SQL数据库进行通信。此外,结构集群在负载均衡器后面。
数据库上下文具有一定范围的生存期,并使用依赖项注入被注入到控制器中。
当同一客户端一致地查询服务时,一切工作都很好,因为负载平衡器保证至少有4分钟的时间,同一用户将被发送到同一服务实例。但是,当负载平衡器决定将用户发送到其他实例时,将再次创建数据库上下文(由于生存期是作用域的,这意味着将为每个新的Web请求创建一个上下文)。不幸的是,模型构建过程耗时很长,因此,在相同的Web请求上,第一个查询总是比随后的查询慢得多。
问题是,是否可以以某种方式缓存EF Core模型,这样就不必在每次发生上述情况时都对其进行重建?
我的意思是,与EF类似的过程-一次创建.edmx
文件,并在上下文创建时将其加载。
答案 0 :(得分:1)
截至2020年3月3日https://github.com/dotnet/efcore/issues/1906,这仍然是不可能的。
如果出于性能原因需要模型缓存,则需要使用EF6。好消息是,EF 6.3和EF 6的SQL Server提供程序已移植到.net核心3.0上运行。但是其他提供商可能会也可能不会移植其代码,因此支持可能参差不齐。