/// <summary> /// This is an internal API that supports the Entity Framework Core infrastructure and not subject to /// the same compatibility standards as public APIs. It may be changed or removed without notice in /// any release. You should only use it directly in your code with extreme caution and knowing that /// doing so can result in application failures when updating to a new Entity Framework Core release. /// </summary> protected virtual IConventionIndex CreateIndex( [NotNull] IReadOnlyList <IConventionProperty> properties, bool unique, [NotNull] IConventionEntityTypeBuilder entityTypeBuilder) { foreach (var key in entityTypeBuilder.Metadata.GetKeys()) { if (AreIndexedBy(properties, unique, key.Properties, coveringIndexUnique: true)) { return(null); } } foreach (var existingIndex in entityTypeBuilder.Metadata.GetIndexes()) { if (AreIndexedBy(properties, unique, existingIndex.Properties, existingIndex.IsUnique)) { return(null); } } var indexBuilder = entityTypeBuilder.HasIndex(properties); if (unique) { indexBuilder?.IsUnique(true); } return(indexBuilder?.Metadata); }