インデックスIndexes

インデックスは、多くのデータ ストア間での一般的な概念です。Indexes are a common concept across many data stores. データ ストア内には、その実装は異なる場合があります、それらを使用して、列 (または列のセット) に基づく参照より効率的です。While their implementation in the data store may vary, they are used to make lookups based on a column (or set of columns) more efficient.

規則Conventions

慣例により、各プロパティ (または一連のプロパティ) で外部キーとして使用されるインデックスを作成します。By convention, an index is created in each property (or set of properties) that are used as a foreign key.

データの注釈Data Annotations

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

Fluent APIFluent API

Fluent API を使用すると、1 つのプロパティに、インデックスを指定します。You can use the Fluent API to specify an index on a single property. 既定では、インデックスが一意でないです。By default, indexes are non-unique.

class MyContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Blog>()
            .HasIndex(b => b.Url);
    }
}

public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }
}

指定できます、インデックスが一意にする必要がありますいない 2 つのエンティティが指定されたプロパティの同じ値を持てることを意味します。You can also specify that an index should be unique, meaning that no two entities can have the same value(s) for the given property(s).

        modelBuilder.Entity<Blog>()
            .HasIndex(b => b.Url)
            .IsUnique();

インデックスは、1 つ以上の列にも指定できます。You can also specify an index over more than one column.

class MyContext : DbContext
{
    public DbSet<Person> People { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Person>()
            .HasIndex(p => new { p.FirstName, p.LastName });
    }
}

public class Person
{
    public int PersonId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

ヒント

プロパティの個別のセットごとの 1 つだけのインデックスがあります。There is only one index per distinct set of properties. Fluent API を使用して一連の規則または以前の構成によってプロパティが既に定義されている、インデックスでインデックスを構成する場合そのインデックスの定義は、変更するされます。If you use the Fluent API to configure an index on a set of properties that already has an index defined, either by convention or previous configuration, then you will be changing the definition of that index. これは、さらに規約によって作成されたインデックスを構成する場合に便利です。This is useful if you want to further configure an index that was created by convention.