使用实体框架在 ASP.NET MVC 中为具有一对多关系的数据库播种
Posted
技术标签:
【中文标题】使用实体框架在 ASP.NET MVC 中为具有一对多关系的数据库播种【英文标题】:Seeding database with a one-to-many relationship in ASP.NET MVC using Entity Framework 【发布时间】:2021-12-28 07:26:58 【问题描述】:在我的应用启动时努力正确地为我的数据库播种。 FlightId
、DepartureAirportId
、ArrivalAirportId
、FlightDateTime
和 FlightDurationHours
都已添加,但如何确保已添加 Airport
列。
我已经在Airport
和Flights
之间建立了与实体框架的一对多关系。
下面的代码在我的AddDbInitializer
类中,它在启动时运行。
new Flight()
DepartureAirportId = 3,
ArrivalAirportId = 7,
FlightDateTime = new DateTime(2021, 12, 21, 08, 0, 0, 0),
FlightDurationHours = 2,
Airport = context.Airports.Find(3) // ADDED THIS LINE BUT IT DOESN'T WORK
飞行等级:
public class Flight
public int FlightId get; set;
public int DepartureAirportId get; set;
public int ArrivalAirportId get; set;
public DateTime FlightDateTime get; set;
public int FlightDurationHours get; set;
public Airport Airport get; set;
机场等级:
public class Airport
public int AirportId get; set;
public string AirportCode get; set;
public ICollection<Flight> Flight get; set;
【问题讨论】:
【参考方案1】:你在拯救机场后context.SaveChanges()
了吗?
你可以添加数据,但是如果你想引用它来添加额外的项目,你需要先提交它,否则它在技术上还不存在。
【讨论】:
是的,机场是在到达添加航班的位置之前添加的。 那么只要有AirportId == 3
的机场,您的代码就可以了。除此之外,您还需要提供有关问题所在的更多信息。描述您遇到的行为、错误消息等。
深究!因为我已经从我的数据库中删除了这些条目,所以我的 Airport
ID 已经改变并且不是从 1 开始的。
我会更好地配置我的Flight
表,以便DepartureAirportId
和ArrivalAirportId
都是像Airport
这样的实际机场对象吗?当关系是一对多时,这甚至可能在一张表中有多个 Airport 对象吗?以上是关于使用实体框架在 ASP.NET MVC 中为具有一对多关系的数据库播种的主要内容,如果未能解决你的问题,请参考以下文章
实体框架探查器 - 带有 EF 6 的 ASP.NET MVC4 - 无法确定提供程序名称
如何在 Asp.Net 5 (MVC 6) 中使用实体框架 6.x