EF Core 不断抱怨不存在的索引
EF Core keeps complaining about non existent indexes
我在运行时有一堆来自 EF Core 的日志抱怨,看起来像这样:
[10:56:14 DBG] The index {'InvoiceId'} was not created on entity type 'CompleteCase' as the properties are already covered by the index {'InvoiceId', 'Code'}.
[10:56:14 DBG] The index {'ReportPeriodId'} was not created on entity type 'FixedBill' as the properties are already covered by the index {'ReportPeriodId', 'MedCompanyTypeId', 'FixedBillTypeId'}.
[10:56:14 DBG] The index {'CasePeriodId'} was not created on entity type 'Invoice' as the properties are already covered by the index {'CasePeriodId', 'ReportPeriodId', 'MedCompanyTypeId'}.
[10:56:14 DBG] The index {'InvoiceId'} was not created on entity type 'InvoiceFixedBillMap' as the properties are already covered by the index {'InvoiceId', 'FixedBillId'}.
[10:56:14 DBG] The index {'MedCompanyDepartmentTypeId'} was not created on entity type 'MedCompanyDepartmentDoctorMap' as the properties are already covered by the index {'MedCompanyDepartmentTypeId', 'MedCompanyDoctorTypeId', 'DoctorSpecialtyTypeId', 'StartDate', 'EndDate'}.
[10:56:14 DBG] The index {'VMPMethodTypeId'} was not created on entity type 'VMPMethodMKBMap' as the properties are already covered by the index {'VMPMethodTypeId', 'MKBTypeId'}.
[10:56:14 DBG] The index {'KSGBaseRateTypeId'} was not created on entity type 'KSGBaseRate' as the properties are already covered by the index {'KSGBaseRateTypeId', 'StartDate', 'EndDate'}.
[10:56:14 DBG] The index {'KSGTypeId'} was not created on entity type 'KSGIndexRate' as the properties are already covered by the index {'KSGTypeId', 'KSGIndexTypeId', 'StartDate', 'EndDate'}.
[10:56:14 DBG] The index {'MedCompanyTypeId'} was not created on entity type 'MedCompanyKSGIndexRate' as the properties are already covered by the index {'MedCompanyTypeId', 'MedCompanyUnitTypeId', 'MedCompanyDepartmentTypeId', 'UMPTypeId', 'KSGIndexTypeId', 'StartDate', 'EndDate'}.
[10:56:14 DBG] The index {'UserId'} was not created on entity type 'UserRole' as the properties are already covered by the index {'UserId', 'RoleId'}.
[10:56:14 DBG] The index {'UserId'} was not created on entity type 'IdentityUserToken<Guid>' as the properties are already covered by the index {'UserId', 'LoginProvider', 'Name'}.
我明白了这些的原因——因为有使用这些列的复合索引,它们使单独的索引变得无用。这些列都是外键,EF Core 在迁移过程中自动创建。
但是 none 这些索引实际上存在于迁移或数据库本身中(代码优先)。我已经非常仔细地检查过了。甚至删除所有迁移并从头开始创建它们 - 什么都没有。但是在运行时我每次都会得到这些。
忽略它是否安全,或者我应该采取一些措施?
P.S。使用 SQL 服务器作为数据库提供程序在 3.1.8 上测试。
But none of these indexes actually exists in migrations or the database itself (Code first).
当然他们没有,你在这里看到的只是一个警告告诉你一些索引已被删除(忽略)从模型。可能令人困惑的部分是你没有明确请求这样的索引,正如你所说,它们是由 EF 自动创建的(顺便说一句,不能从外部删除)所以 EF Core 不应该警告你。
但事实就是如此。不为领先于另一个索引的列生成索引是完全可以的。您可以安全地忽略它,并通过将以下内容添加到 OnConfiguring
override 来抑制它:
optionsBuilder.ConfigureWarnings(warnings => warnings
.Ignore(CoreEventId.RedundantIndexRemoved);
我在运行时有一堆来自 EF Core 的日志抱怨,看起来像这样:
[10:56:14 DBG] The index {'InvoiceId'} was not created on entity type 'CompleteCase' as the properties are already covered by the index {'InvoiceId', 'Code'}.
[10:56:14 DBG] The index {'ReportPeriodId'} was not created on entity type 'FixedBill' as the properties are already covered by the index {'ReportPeriodId', 'MedCompanyTypeId', 'FixedBillTypeId'}.
[10:56:14 DBG] The index {'CasePeriodId'} was not created on entity type 'Invoice' as the properties are already covered by the index {'CasePeriodId', 'ReportPeriodId', 'MedCompanyTypeId'}.
[10:56:14 DBG] The index {'InvoiceId'} was not created on entity type 'InvoiceFixedBillMap' as the properties are already covered by the index {'InvoiceId', 'FixedBillId'}.
[10:56:14 DBG] The index {'MedCompanyDepartmentTypeId'} was not created on entity type 'MedCompanyDepartmentDoctorMap' as the properties are already covered by the index {'MedCompanyDepartmentTypeId', 'MedCompanyDoctorTypeId', 'DoctorSpecialtyTypeId', 'StartDate', 'EndDate'}.
[10:56:14 DBG] The index {'VMPMethodTypeId'} was not created on entity type 'VMPMethodMKBMap' as the properties are already covered by the index {'VMPMethodTypeId', 'MKBTypeId'}.
[10:56:14 DBG] The index {'KSGBaseRateTypeId'} was not created on entity type 'KSGBaseRate' as the properties are already covered by the index {'KSGBaseRateTypeId', 'StartDate', 'EndDate'}.
[10:56:14 DBG] The index {'KSGTypeId'} was not created on entity type 'KSGIndexRate' as the properties are already covered by the index {'KSGTypeId', 'KSGIndexTypeId', 'StartDate', 'EndDate'}.
[10:56:14 DBG] The index {'MedCompanyTypeId'} was not created on entity type 'MedCompanyKSGIndexRate' as the properties are already covered by the index {'MedCompanyTypeId', 'MedCompanyUnitTypeId', 'MedCompanyDepartmentTypeId', 'UMPTypeId', 'KSGIndexTypeId', 'StartDate', 'EndDate'}.
[10:56:14 DBG] The index {'UserId'} was not created on entity type 'UserRole' as the properties are already covered by the index {'UserId', 'RoleId'}.
[10:56:14 DBG] The index {'UserId'} was not created on entity type 'IdentityUserToken<Guid>' as the properties are already covered by the index {'UserId', 'LoginProvider', 'Name'}.
我明白了这些的原因——因为有使用这些列的复合索引,它们使单独的索引变得无用。这些列都是外键,EF Core 在迁移过程中自动创建。
但是 none 这些索引实际上存在于迁移或数据库本身中(代码优先)。我已经非常仔细地检查过了。甚至删除所有迁移并从头开始创建它们 - 什么都没有。但是在运行时我每次都会得到这些。
忽略它是否安全,或者我应该采取一些措施?
P.S。使用 SQL 服务器作为数据库提供程序在 3.1.8 上测试。
But none of these indexes actually exists in migrations or the database itself (Code first).
当然他们没有,你在这里看到的只是一个警告告诉你一些索引已被删除(忽略)从模型。可能令人困惑的部分是你没有明确请求这样的索引,正如你所说,它们是由 EF 自动创建的(顺便说一句,不能从外部删除)所以 EF Core 不应该警告你。
但事实就是如此。不为领先于另一个索引的列生成索引是完全可以的。您可以安全地忽略它,并通过将以下内容添加到 OnConfiguring
override 来抑制它:
optionsBuilder.ConfigureWarnings(warnings => warnings
.Ignore(CoreEventId.RedundantIndexRemoved);