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