Как создать индекс в Entity Framework 6.2 с первым кодом

ef-code-first entity-framework entity-framework-6

Вопрос

Есть ли способ создать индекс для свойства / столбца, используя сначала код, а не использовать новый IndexAttribute ?

Принятый ответ

Ну, 26.10.2017 была официально выпущена Entity Framework 6.2. Он включает в себя возможность легко определять индексы с помощью Fluent API. Ho это использовать уже объявлено в бета 6.2.

Теперь вы можете использовать метод HasIndex() , за которым следует IsUnique() если он должен быть уникальным индексом.

Пример небольшого сравнения (до / после):

// before 
modelBuilder.Entity<Person>()
        .Property(e => e.Name)
        .HasColumnAnnotation(
            IndexAnnotation.AnnotationName, 
            new IndexAnnotation(new IndexAttribute { IsUnique = true }));

// after
modelBuilder.Entity<Person>()
    .HasIndex(p => p.Name)
    .IsUnique();

// multi column index
modelBuilder.Entity<Person>()
    .HasIndex(p => new { p.Name, p.Firstname })
    .IsUnique();

Также можно отметить индекс как сгруппированный с .IsClustered() .

РЕДАКТИРОВАТЬ

Добавлен пример индекса нескольких столбцов и дополнительная информация о том, как пометить индекс как кластерный.


Популярные ответы

В настоящее время нет поддержки «первого класса» для создания индекса через свободный API, но то, что вы можете сделать, - это свободный API, который можно пометить как атрибуты из API аннотаций. Это позволит вам добавить атрибут Index через свободный интерфейс.

Вот несколько примеров из рабочего элемента сайта проблем для EF.

Создайте индекс в одном столбце:

modelBuilder.Entity<MyEntity>()
    .Property(e => e.MyProperty)
    .HasColumnAnnotation(
        IndexAnnotation.AnnotationName, 
        new IndexAnnotation(new IndexAttribute()));

Несколько индексов в одном столбце:

modelBuilder.Entity<MyEntity>()
    .Property(e => e.MyProperty)
    .HasColumnAnnotation(
        IndexAnnotation.AnnotationName, 
        new IndexAnnotation(new IndexAttribute()));

Многоколоночные индексы:

modelBuilder.Entity<MyEntity>()
    .Property(e => e.MyProperty)
    .HasColumnAnnotation(
        IndexAnnotation.AnnotationName, 
        new IndexAnnotation(new IndexAttribute()));

Использование вышеуказанных методов вызовет .CreateIndex() которые будут автоматически созданы для вас в вашей функции Up() когда вы поднимете следующую миграцию (или будете автоматически созданы в базе данных, если вы не используете миграции).




Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему