IndexIndexes

Les index sont un concept commun dans plusieurs bases de données.Indexes are a common concept across many data stores. Bien que leur implémentation dans le magasin de données peut varier, ils sont utilisés pour faire des recherches basées sur une colonne (ou un ensemble de colonnes) plus efficace.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 un ensemble de propriétés) qui sont utilisées comme une 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

Index ne peuvent pas être créés à l’aide des 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 ne sont pas 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, c'est-à-dire qu’aucune deux entités ne peuvent avoir la même valeur (s) pour la propriété donnée.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 existe un seul index par un ensemble distinct de propriétés.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 qui possède déjà un index défini, soit par convention ou par la configuration précédente, puis 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 un index qui a été créé par convention.This is useful if you want to further configure an index that was created by convention.