IndexIndexes

Les index sont un concept commun entre de nombreux magasins de données.Indexes are a common concept across many data stores. Bien que leur implémentation dans le magasin de données puisse varier, elles sont utilisées pour rendre les recherches basées sur une colonne (ou un ensemble de colonnes) plus efficaces.While their implementation in the data store may vary, they are used to make lookups based on a column (or set of columns) more efficient.

ConventionsConventions

Par Convention, un index est créé dans chaque propriété (ou ensemble de propriétés) utilisée comme clé étrangère.By convention, an index is created in each property (or set of properties) that are used as a foreign key.

Annotations de donnéesData Annotations

Les index ne peuvent pas être créés à l’aide d’annotations de données.Indexes can not be created using data annotations.

API FluentFluent API

Vous pouvez utiliser l’API Fluent pour spécifier un index sur une seule propriété.You can use the Fluent API to specify an index on a single property. Par défaut, les index sont non uniques.By default, indexes are non-unique.

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

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

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

Vous pouvez également spécifier qu’un index doit être unique, ce qui signifie que deux entités ne peuvent pas avoir la même valeur pour la ou les propriétés spécifiées.You can also specify that an index should be unique, meaning that no two entities can have the same value(s) for the given property(s).

        modelBuilder.Entity<Blog>()
            .HasIndex(b => b.Url)
            .IsUnique();

Vous pouvez également spécifier un index sur plusieurs colonnes.You can also specify an index over more than one column.

class MyContext : DbContext
{
    public DbSet<Person> People { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Person>()
            .HasIndex(p => new { p.FirstName, p.LastName });
    }
}

public class Person
{
    public int PersonId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

Conseil

Il n’existe qu’un seul index par jeu de propriétés distinct.There is only one index per distinct set of properties. Si vous utilisez l’API Fluent pour configurer un index sur un ensemble de propriétés pour lequel un index est déjà défini, soit par Convention, soit par configuration précédente, vous allez modifier la définition de cet index.If you use the Fluent API to configure an index on a set of properties that already has an index defined, either by convention or previous configuration, then you will be changing the definition of that index. Cela est utile si vous souhaitez configurer davantage un index qui a été créé par Convention.This is useful if you want to further configure an index that was created by convention.