インデックス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 のコアでのインデックスと同じ概念にマップされます。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 を使用して追加したときに、' は NOT NULL' は一意のインデックスの一部であるすべての 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; }
}