Search code examples
entity-frameworkentity-framework-6ef-code-first

How to create index in Entity Framework 6.2 with fluent configuration


Is there a way to create an index on a property/column using fluent configuration, instead of using the new IndexAttribute ?


Solution

  • Well 26.10.2017 Entity Framework 6.2 was officially released. It includes a possibility to define indexes with ease via Fluent API. Ho it is to use was already announced in the beta of 6.2.

    Now you can use the HasIndex() method, followed by IsUnique() if it should be an unique index.

    Just a small comparison (before/after) example:

    // 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();
    

    It is also possible to mark the index as clustered with .IsClustered().


    EDIT #1

    Added an example for multi column index and additional information how to mark an index as clustered.


    EDIT #2

    As additional information, in EF Core 2.1 it is exactly the same like in EF 6.2 now.
    Here is the MS Doc artcile as reference.