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

Why does EF Core 2.1 only add 1 index for 2 FKs?

我使用 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 创建的?

Why was an index created for TrackId but not for ProductId?

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