/// <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 Index CreateIndex( [NotNull] IReadOnlyList <Property> properties, bool unique, [NotNull] InternalEntityTypeBuilder entityTypeBuilder) { foreach (var key in entityTypeBuilder.Metadata.GetKeys()) { if (AreIndexedBy(properties, unique, key.Properties, coveringIndexUniqueness: 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, ConfigurationSource.Convention); if (unique) { indexBuilder?.IsUnique(true, ConfigurationSource.Convention); } return(indexBuilder?.Metadata); }
/// <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> public virtual InternalIndexBuilder Attach([NotNull] InternalEntityTypeBuilder entityTypeBuilder) { var properties = entityTypeBuilder.GetActualProperties(Metadata.Properties, null); if (properties == null) { return(null); } var newIndexBuilder = Metadata.Name == null ? entityTypeBuilder.HasIndex(properties, Metadata.GetConfigurationSource()) : entityTypeBuilder.HasIndex(properties, Metadata.Name, Metadata.GetConfigurationSource()); newIndexBuilder?.MergeAnnotationsFrom(Metadata); var isUniqueConfigurationSource = Metadata.GetIsUniqueConfigurationSource(); if (isUniqueConfigurationSource.HasValue) { newIndexBuilder?.IsUnique(Metadata.IsUnique, isUniqueConfigurationSource.Value); } return(newIndexBuilder); }