インデックスIndexes

注意

このセクションの構成は、リレーショナル データベース全般に適用されます。The configuration in this section is applicable to relational databases in general. ここに示す拡張方法は、リレーショナル データベース プロバイダーをインストールすると (共有 Microsoft.EntityFrameworkCore.Relational パッケージによって) 利用できるようになります。The extension methods shown here will become available when you install a relational database provider (due to the shared Microsoft.EntityFrameworkCore.Relational package).

リレーショナル データベース内のインデックスは、Entity framework core でのインデックスと同じ概念にマップされます。An index in a relational database maps to the same concept as an index in the core of Entity Framework.

規約Conventions

慣例により、インデックスの名前はIX_<type name>_<property name>します。By convention, indexes are named IX_<type name>_<property name>. 複合インデックスの<property name>はプロパティ名、アンダー スコア区切りリストになります。For composite indexes <property name> becomes an underscore separated list of property names.

データの注釈Data Annotations

データ注釈を使用してインデックスを構成しないことができます。Indexes can not be configured using Data Annotations.

Fluent APIFluent API

Fluent API を使用すると、インデックスの名前を構成します。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; }
}

フィルターを指定することもできます。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; }
}

SQL Server プロバイダー EF を使用して追加するときは、一意のインデックスの一部であるすべての null 許容列の ' IS NOT NULL' フィルター処理します。When using the SQL Server provider EF adds a 'IS NOT NULL' filter for all nullable columns that are part of a unique index. この規則を指定することができますを上書きする、null値。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; }
}