由于产生时间成本,禁用 EF Core 3.1 的模型验证
Posted
技术标签:
【中文标题】由于产生时间成本,禁用 EF Core 3.1 的模型验证【英文标题】:Disable model validation for EF Core 3.1 due to time cost incurred 【发布时间】:2021-01-18 15:08:09 【问题描述】:我有一个使用 .NET Core 3.1、EF Core 3.1 和 AWS Lambda + AWS API Gateway 构建的无服务器 Web api。 API 返回到 AWS Aurora RDS 后端。每当 EF Core 需要运行此模型验证步骤时,我都会遇到一些延迟(大约 3 到 4 秒):
Microsoft.EntityFrameworkCore.Model.Validation[10400]
请参阅下面的日志,此步骤的结果为 5 分 51 秒到 5 分 54 秒。
2020-10-03T08:05:51.131+10:00 START RequestId: cd8375df-7f43-4983-b8c3-ad64fa378a2b Version: 3
2020-10-03T08:05:54.993+10:00 [40m[1m[33mwarn[39m[22m[49m: Microsoft.EntityFrameworkCore.Model.Validation[10400]
2020-10-03T08:05:54.994+10:00 Sensitive data logging is enabled. Log entries and exception messages may include sensitive application data, this mode should only be enabled during development.
2020-10-03T08:05:55.048+10:00 [40m[32minfo[39m[22m[49m: Microsoft.EntityFrameworkCore.Infrastructure[10403]
2020-10-03T08:05:55.048+10:00 Entity Framework Core 3.1.4 initialized 'loyaltyContext' using provider 'Npgsql.EntityFrameworkCore.PostgreSQL' with options: SensitiveDataLoggingEnabled
有没有办法关闭这个模型验证?如果是这样,它会带来什么风险?如果风险是值得的,我想禁用它以提高 API 的性能。我已经尽可能地让容器保持温暖,使用预置并发来保持容器处于活动状态,并且我在 AWS Aurora RDS 后端使用 PostgreSQL 连接池来尽可能多地重用连接,但我仍然经常打“新鲜” ' 执行此步骤的 EF Core 连接。当重新使用连接时,延迟非常低,我对性能非常满意,只是这一步有时会导致事情下降。
【问题讨论】:
【参考方案1】:代码
services.AddDbContext<DbContext>(option => option.UseOracle(Configuration.GetConnectionString("ConnectionString"), b => b.UseOracleSQLCompatibility("11"))
.ConfigureWarnings(b => b.Ignore(OracleEventId.DecimalTypeDefaultWarning)));
【讨论】:
您能帮我理解您粘贴的内容是如何回答我的问题的吗?一开始是指Oracle,但我看不到有关禁用模型验证的任何信息? 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。以上是关于由于产生时间成本,禁用 EF Core 3.1 的模型验证的主要内容,如果未能解决你的问题,请参考以下文章
从 .NET Core 2.2 迁移到 3.1 后,EF Core 随机抓取 API 请求上的用户表