IndeksyIndexes

Uwaga

Ogólnie rzecz biorąc jest odpowiednie dla relacyjnych baz danych konfiguracji w tej sekcji.The configuration in this section is applicable to relational databases in general. Metody rozszerzenia, pokazane tutaj staną się dostępne po zainstalowaniu dostawcy relacyjnej bazy danych (z powodu udostępnionej 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).

Indeks w relacyjnej bazie danych jest mapowany na tę samą koncepcję jako indeks w obszarach podstawowych programu Entity Framework.An index in a relational database maps to the same concept as an index in the core of Entity Framework.

KonwencjeConventions

Zgodnie z Konwencją indeksy są nazywane IX_<type name>_<property name>.By convention, indexes are named IX_<type name>_<property name>. Dla indeksów złożonych <property name> staje się listę nazw właściwości oddzielonych znakiem podkreślenia.For composite indexes <property name> becomes an underscore separated list of property names.

Adnotacje danychData Annotations

Indeksy nie można skonfigurować przy użyciu adnotacji danych.Indexes can not be configured using Data Annotations.

Interfejs Fluent APIFluent 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; }
}

Po dodaniu przy użyciu dostawcy programu SQL Server EF 'IS NOT NULL' filtrować wszystkie kolumny dopuszczające wartość 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; }
}