예제 #1
0
 private static void TrySetIndexName(IndexBuilder indexBuilder, string indexName)
 {
     indexName = indexName?.Trim();
     if (string.IsNullOrEmpty(indexName) || indexName.StartsWith("@"))
     {
         return;
     }
     indexBuilder.HasName(indexName);
 }
예제 #2
0
        public static IndexBuilder IsColumnStore(this IndexBuilder indexBuilder, string name)
        {
            var includeStatement = new StringBuilder();

            indexBuilder.HasAnnotation(ColumnStoreIndexAnnotationName, includeStatement.ToString());
            indexBuilder.HasName(name);

            return(indexBuilder);
        }
예제 #3
0
        /// <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);