【发布时间】:2021-05-30 18:18:12
【问题描述】:
假设我们有 Airport 和 Runway 类:
在两个表之间具有完美的一对多关系:Play 和 Player:
public class Airport
{
public int Id { get; set; }
public string Name { get; set; }
public virtual IList<Runway> Runways { get; set; }
}
public class Runway
{
public int Id { get; set; }
public string Name { get; set; }
//public int AirportId { get; set; } <- I don't need it!!!
}
我的目标是省略 Runway 一侧的导航属性(我不需要指向 Airport 的链接)。
但是当我使用dotnet-ef migrations add InitialCreate 命令时,会在数据库中为Runway 表创建一个AirportId 字段。
如何使用 EF Core 5 仅在一侧(在集合端)配置与导航属性的一对多关系?
有similar question,但用于集合端的导航属性。
我尝试了以下但没有成功(没有任何变化):
modelBuilder.Entity<Airport>()
.HasMany<Runway>(a => a.Runways)
.WithOne()
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
【问题讨论】:
-
在您决定删除它之前,您的初始迁移之一中是否包含 airportId 字段?因为如果您从未指定该列,我认为没有理由将其包含在您的数据库中。
-
在一对多中,您需要在多个边表中的外键。在
Runaway表中有AirportId是正常的。 -
EF 将在
Runway表中创建一个可为空的AirportId外键列,即使您删除了属性和关系配置代码。您如何期望数据库在没有外键列的情况下跟踪哪个Runway属于哪个Airport?外键列是一对多关系的核心概念。 -
@Qudus - 不,不是。我没有以前的迁移。
标签: c# .net-core entity-framework-core