IndexIndexes

Note

La configuration indiquée dans cette section s’applique aux bases de données relationnelles en général.The configuration in this section is applicable to relational databases in general. Les méthodes d’extension indiquées ici sont disponibles quand vous installez un fournisseur de base de données relationnelle (en raison du package partagé Microsoft.EntityFrameworkCore.Relational).The extension methods shown here will become available when you install a relational database provider (due to the shared Microsoft.EntityFrameworkCore.Relational package).

Un index dans une base de données relationnelle est mappé au même concept en tant qu’index dans le cœur d’Entity Framework.An index in a relational database maps to the same concept as an index in the core of Entity Framework.

ConventionsConventions

Par convention, les index sont nommés IX_<type name>_<property name>.By convention, indexes are named IX_<type name>_<property name>. Pour les index composites <property name> devient une liste séparée par des traits de soulignement de noms de propriétés.For composite indexes <property name> becomes an underscore separated list of property names.

Annotations de donnéesData Annotations

Index ne peuvent pas être configurés à l’aide des Annotations de données.Indexes can not be configured using Data Annotations.

API FluentFluent API

Vous pouvez utiliser l’API Fluent pour configurer le nom d’un index.You can use the Fluent API to configure the name of an index.

class MyContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Blog>()
            .HasIndex(b => b.Url)
            .HasName("Index_Url");
    }
}

public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }
}

Vous pouvez également spécifier un filtre.You can also specify a filter.

class MyContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Blog>()
            .HasIndex(b => b.Url)
            .HasFilter("[Url] IS NOT NULL");
    }
}

public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }
}

Lors de l’utilisation du fournisseur SQL Server EF ajoute un 'IS NOT NULL' filtrer pour toutes les colonnes nullables qui font partie d’un index unique.When using the SQL Server provider EF adds a 'IS NOT NULL' filter for all nullable columns that are part of a unique index. Pour remplacer cette convention, vous pouvez fournir un null valeur.To override this convention you can supply a null value.

class MyContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Blog>()
            .HasIndex(b => b.Url)
            .IsUnique()
            .HasFilter(null);
    }
}

public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }
}