我使用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
创建索引?
为什么为TrackId创建索引而不为ProductId创建索引?
这实际上是非常聪明的,并且是EF的正确行为。 TblProductItem上的主键是(ProductId,TrackId)。因此,您[[已经有一个支持该外键的索引(因为FK列是该索引中的前导列)。只有结尾的PK列(TrackId)需要单独的索引来支持外键。