繁体   English   中英

使用实体框架在 ASP.NET MVC 中为具有一对多关系的数据库播种

[英]Seeding database with a one-to-many relationship in ASP.NET MVC using Entity Framework

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

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

下面的代码在我的AddDbInitializer class 中,它在启动时运行。

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
}

航班 class:

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; }
}

机场 class:

public class Airport
{
    public int AirportId { get; set; }
    public string AirportCode { get; set; }

    public ICollection<Flight> Flight { get; set; }
}

保存机场后你有context.SaveChanges()吗?

您可以添加数据,但如果您想引用它来添加其他项目,您需要先提交它,否则从技术上讲它还不存在。

Airport= context.Airports.Find(3) 将是 null 这不是使用 LINQ 中的查找方法的正确方法。 一种方法是使用 lambda 表达式,通过 context.Airports.find(x=>x.AirportId==3) 更改或者您可以将整体作为 LINQ 表达式:var airport=select a from context.Airports where a.AirportId= =3; 新的 Filght(){.... 机场=机场 }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM