【问题标题】:Seeding database with a one-to-many relationship in ASP.NET MVC using Entity Framework使用实体框架在 ASP.NET MVC 中为具有一对多关系的数据库播种
【发布时间】:2021-12-28 07:26:58
【问题描述】:

在我的应用启动时努力正确地为我的数据库播种。 FlightIdDepartureAirportIdArrivalAirportIdFlightDateTimeFlightDurationHours 都已添加,但如何确保已添加 Airport 列。

我已经在AirportFlights 之间建立了与实体框架的一对多关系。

下面的代码在我的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; }
}

【问题讨论】:

    标签: asp.net asp.net-mvc entity-framework


    【解决方案1】:

    你在拯救机场后context.SaveChanges()了吗?

    你可以添加数据,但是如果你想引用它来添加额外的项目,你需要先提交它,否则它在技术上还不存在。

    【讨论】:

    • 是的,机场是在到达添加航班的位置之前添加的。
    • 那么只要有AirportId == 3 的机场,您的代码就可以了。除此之外,您还需要提供有关问题所在的更多信息。描述您遇到的行为、错误消息等。
    • 深究!因为我已经从我的数据库中删除了这些条目,所以我的 Airport ID 已经改变并且不是从 1 开始的。
    • 我会更好地配置我的Flight 表,以便DepartureAirportIdArrivalAirportId 都是像Airport 这样的实际机场对象吗?当关系是一对多时,这甚至可能在一张表中有多个 Airport 对象吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 2013-09-22
    • 1970-01-01
    • 2020-09-12
    • 2018-09-27
    • 1970-01-01
    • 2014-04-30
    相关资源
    最近更新 更多