インデックス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.