Почему EF Core 2.1 добавляет только 1 индекс для 2 FK? - PullRequest
1 голос
/ 02 ноября 2019

Я использую 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?

1 Ответ

1 голос
/ 02 ноября 2019

Почему индекс был создан для TrackId, но не для ProductId?

Это действительно очень умное и правильное поведение EF. Первичный ключ для TblProductItem - (ProductId, TrackId). Таким образом, у вас уже есть индекс, поддерживающий этот внешний ключ (поскольку столбцы FK являются ведущими столбцами в этом индексе). Только конечный столбец PK (TrackId) нуждается в отдельном индексе для поддержки внешнего ключа.

...