ÍndicesIndexes

Observação

A configuração nesta seção é aplicável a bancos de dados relacionais em geral.The configuration in this section is applicable to relational databases in general. Os métodos de extensão mostrados aqui ficarão disponíveis quando você instalar um provedor de banco de dados relacional (devido ao pacote Microsoft.EntityFrameworkCore.Relational compartilhado).The extension methods shown here will become available when you install a relational database provider (due to the shared Microsoft.EntityFrameworkCore.Relational package).

Um índice em um banco de dados relacional é mapeado para o mesmo conceito que um índice no núcleo do Entity Framework.An index in a relational database maps to the same concept as an index in the core of Entity Framework.

ConvençõesConventions

Por convenção, os índices são denominados IX_<type name>_<property name>.By convention, indexes are named IX_<type name>_<property name>. Para índices compostos <property name> torna-se uma lista de sublinhado separado dos nomes de propriedade.For composite indexes <property name> becomes an underscore separated list of property names.

Anotações de dadosData Annotations

Índices não podem ser configurados usando as anotações de dados.Indexes can not be configured using Data Annotations.

API fluenteFluent API

Você pode usar a API fluente para configurar o nome de um índice.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; }
}

Você também pode especificar um filtro.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; }
}

Quando usar o provedor do SQL Server EF adiciona um 'IS NOT NULL' Filtrar todas as colunas anuláveis que fazem parte de um índice exclusivo.When using the SQL Server provider EF adds a 'IS NOT NULL' filter for all nullable columns that are part of a unique index. Para substituir essa convenção, você pode fornecer um null valor.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; }
}