IndeksyIndexes

Uwaga

Konfiguracja opisana w tej sekcji ma zastosowanie do relacyjnych baz danych w zasadzie.The configuration in this section is applicable to relational databases in general. Metody rozszerzenia pokazane staną się dostępne po zainstalowaniu dostawcy relacyjnej bazy danych (z powodu udostępnionego Microsoft.EntityFrameworkCore.Relational pakietu).The extension methods shown here will become available when you install a relational database provider (due to the shared Microsoft.EntityFrameworkCore.Relational package).

Mapuje indeksu relacyjnej bazy danych do tego samego pojęcia jako indeks w podstawowe programu Entity Framework.An index in a relational database maps to the same concept as an index in the core of Entity Framework.

KonwencjeConventions

Konwencja, indeksy są nazywane IX_<type name>_<property name>.By convention, indexes are named IX_<type name>_<property name>. Złożone indeksów <property name> staje się podkreślenia oddzielone listę nazw właściwości.For composite indexes <property name> becomes an underscore separated list of property names.

Adnotacji danychData Annotations

Indeksy nie można skonfigurować za pomocą adnotacji danych.Indexes can not be configured using Data Annotations.

Interfejsu API FluentFluent API

Aby skonfigurować nazwę indeksu, można użyć interfejsu API Fluent.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; }
}

Można również określić filtr.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; }
}

Przy użyciu dostawcy programu SQL Server EF dodaje "IS NOT NULL" Filtruj wszystkie kolumny wartości null, które są częścią unikatowego indeksu.When using the SQL Server provider EF adds a 'IS NOT NULL' filter for all nullable columns that are part of a unique index. Aby zastąpić tę Konwencję, możesz podać null wartość.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; }
}