/// <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 IndexBuilder VisitIndex([NotNull] EntityTypeBuilder builder, [NotNull] DatabaseIndex index) { Check.NotNull(builder, nameof(builder)); Check.NotNull(index, nameof(index)); var unmappedColumns = index.Columns .Where(c => _unmappedColumns.Contains(c)) .Select(c => c.Name) .ToList(); if (unmappedColumns.Count > 0) { _reporter.WriteWarning( DesignStrings.UnableToScaffoldIndexMissingProperty( index.Name, string.Join(CultureInfo.CurrentCulture.TextInfo.ListSeparator, unmappedColumns))); return(null); } var propertyNames = index.Columns.Select(GetPropertyName).ToArray(); var indexBuilder = index.Name == null ? builder.HasIndex(propertyNames) : builder.HasIndex(propertyNames, index.Name) .IsUnique(index.IsUnique); if (index.Filter != null) { indexBuilder.HasFilter(index.Filter); } indexBuilder.Metadata.AddAnnotations(index.GetAnnotations()); return(indexBuilder); }
/// <summary> /// This API supports the Entity Framework Core infrastructure and is not intended to be used /// directly from your code. This API may change or be removed in future releases. /// </summary> protected virtual IndexBuilder VisitIndex(EntityTypeBuilder builder, DatabaseIndex index) { if (builder == null) { throw new ArgumentNullException(nameof(builder)); } if (index == null) { throw new ArgumentNullException(nameof(index)); } var unmappedColumns = index.Columns .Where(c => _unmappedColumns.Contains(c)) .Select(c => c.Name) .ToList(); if (unmappedColumns.Any()) { _reporter.WriteWarning( DesignStrings.UnableToScaffoldIndexMissingProperty( index.Name, string.Join(CultureInfo.CurrentCulture.TextInfo.ListSeparator, unmappedColumns))); return(null); } var propertyNames = index.Columns.Select(GetPropertyName).ToArray(); var indexBuilder = builder.HasIndex(propertyNames) .IsUnique(index.IsUnique); if (index.Filter != null) { indexBuilder.HasFilter(index.Filter); } if (!string.IsNullOrEmpty(index.Name) && index.Name != ConstraintNamer.GetDefaultName(indexBuilder.Metadata)) { indexBuilder.HasName(index.Name); } indexBuilder.Metadata.AddAnnotations(index.GetAnnotations()); return(indexBuilder); }