为什么EF Core 2.1仅为2个FK添加1个索引?

问题描述 投票:0回答:1

我使用SQL Server 2017(v14.0.2027.2)和EF Core 2.1。

在此代码上添加迁移后:

public class TblTrack
{
    public long Id { get; set; }
    ...
}

public class TblProduct
{
    public long Id { get; set; }
    ...
}

public class TblProductItem
{
    [Key]
    [Required]
    public long ProductId { get; set; }

    [Key]
    [Required]
    public long TrackId { get; set; }

    // Navigation properties
    public TblProduct Product { get; set; }
    public TblTrack Track { get; set; }
}

Ef Core仅创建TrackId索引

migrationBuilder.CreateIndex(
name: "IX_tbl_ProductItems_TrackId",
table: "tbl_ProductItems",
column: "TrackId");

为什么为TrackId创建索引但没有为ProductId创建索引?

c# sql-server entity-framework ef-migrations ef-core-2.1
1个回答
0
投票

为什么为TrackId创建索引而不为ProductId创建索引?

这实际上是非常聪明的,并且是EF的正确行为。 TblProductItem上的主键是(ProductId,TrackId)。因此,您[[已经有一个支持该外键的索引(因为FK列是该索引中的前导列)。只有结尾的PK列(TrackId)需要单独的索引来支持外键。

© www.soinside.com 2019 - 2024. All rights reserved.