ÍndicesIndexes

Os índices são um conceito comum entre vários armazenamentos de dados.Indexes are a common concept across many data stores. Embora sua implementação no armazenamento de dados pode variar, eles são usados para fazer pesquisas com base em uma coluna (ou conjunto de colunas) mais eficiente.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.

ConvençõesConventions

Por convenção, um índice é criado em cada propriedade (ou conjunto de propriedades) que são usados como uma chave estrangeira.By convention, an index is created in each property (or set of properties) that are used as a foreign key.

Anotações de dadosData Annotations

Não é possível criar índices usando anotações de dados.Indexes can not be created using data annotations.

API fluenteFluent API

Você pode usar a API Fluent para especificar um índice em uma única propriedade.You can use the Fluent API to specify an index on a single property. Por padrão, os índices são não exclusivo.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; }
}

Você também pode especificar que um índice deve ser exclusivo, que significa que não há duas entidades podem ter o mesmo valor (es) para a propriedade fornecido (s).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();

Você também pode especificar um índice em mais de uma coluna.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; }
}

Dica

Há apenas um índice por um conjunto distinto de propriedades.There is only one index per distinct set of properties. Se você usar a API Fluent para configurar um índice em um conjunto de propriedades que já tem um índice definido, por convenção ou configuração anterior, em seguida, você estará alterando a definição de índice.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. Isso é útil se você deseja configurar um índice que foi criado por convenção.This is useful if you want to further configure an index that was created by convention.