private static void TrySetIndexName(IndexBuilder indexBuilder, string indexName) { indexName = indexName?.Trim(); if (string.IsNullOrEmpty(indexName) || indexName.StartsWith("@")) { return; } indexBuilder.HasName(indexName); }
public static IndexBuilder IsColumnStore(this IndexBuilder indexBuilder, string name) { var includeStatement = new StringBuilder(); indexBuilder.HasAnnotation(ColumnStoreIndexAnnotationName, includeStatement.ToString()); indexBuilder.HasName(name); return(indexBuilder); }
/// <summary> /// converts the "index" tag to fluent additions, excluding owned types /// Credit to https://github.com/jsakamoto/EntityFrameworkCore.IndexAttribute/blob/master/EntityFrameworkCore.IndexAttribute/IndexAttribute.cs /// </summary> /// <param name="modelBuilder"></param> public static void BuildIndexesFromAnnotations(this ModelBuilder modelBuilder) { foreach (var entityType in modelBuilder.Model.GetEntityTypes().Where(ent => ent.ClrType.GetCustomAttribute <OwnedAttribute>() == null).ToList()) { var items = entityType.ClrType .GetProperties() .SelectMany(prop => Attribute.GetCustomAttributes(prop, typeof(IndexAttribute)) .Cast <IndexAttribute>() .Select(index => new { prop, index }) ) .ToArray(); var indexParams = items .Where(item => String.IsNullOrEmpty(item.index.Name)) .Select(item => new IndexParam(item.index, item.prop)); var namedIndexParams = items .Where(item => !String.IsNullOrEmpty(item.index.Name)) .GroupBy(item => item.index.Name) .Select(g => new IndexParam( g.First().index, g.OrderBy(item => item.index.Order).Select(item => item.prop).ToArray()) ); if (!entityType.IsQueryType) { EntityTypeBuilder entity = modelBuilder.Entity(entityType.ClrType); foreach (var indexParam in indexParams.Concat(namedIndexParams)) { IndexBuilder indexBuilder = entity .HasIndex(indexParam.PropertyNames) .IsUnique(indexParam.IsUnique); if (!String.IsNullOrEmpty(indexParam.IndexName)) { indexBuilder.HasName(indexParam.IndexName); } } } } }
public static IndexBuilder HasName(this IndexBuilder indexBuilder, Func <string, string> nameFactory = null) { indexBuilder.NotNull(nameof(indexBuilder)); var sb = new StringBuilder(); // Prefix: EntityBodyName sb.Append(indexBuilder.Metadata.DeclaringEntityType.ClrType.GetGenericBodyName()); foreach (var property in indexBuilder.Metadata.Properties) { sb.Append(property.Name); } // Suffix: Index sb.Append("Index"); var name = sb.ToString(); return(indexBuilder.HasName(nameFactory?.Invoke(name) ?? name)); }
public static IndexBuilder <TEntity> HasName <TEntity>([NotNull] this IndexBuilder <TEntity> indexBuilder, [CanBeNull] string name) => indexBuilder.HasName(name);
public static IndexBuilder HasName([NotNull] this IndexBuilder indexBuilder, [CanBeNull] string name) => indexBuilder.HasName(name);