简体   繁体   English

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

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

Struggling to properly seed my database when my app starts up.当我的应用程序启动时,努力正确地为我的数据库播种。 FlightId , DepartureAirportId , ArrivalAirportId , FlightDateTime and FlightDurationHours all get added but how can I ensure the Airport column is added. FlightIdDepartureAirportIdArrivalAirportIdFlightDateTimeFlightDurationHours都被添加,但我如何确保添加Airport列。

I have set-up a one to many relationship with Entity Framework between Airport and Flights .我已经在AirportFlights之间建立了与实体框架的一对多关系。

The below code is inside my AddDbInitializer class which runs at start-up.下面的代码在我的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
}

Flight class:航班 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; }
}

Airport class:机场 class:

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

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

Did you context.SaveChanges() after saving the airport?保存机场后你有context.SaveChanges()吗?

You can add the data, but if you want to reference it for adding additional items, you need to commit it first otherwise it technically isn't there yet.您可以添加数据,但如果您想引用它来添加其他项目,您需要先提交它,否则从技术上讲它还不存在。

Airport= context.Airports.Find(3) would be null That is not the correct way to use find method from LINQ. Airport= context.Airports.Find(3) 将是 null 这不是使用 LINQ 中的查找方法的正确方法。 One way would be using lambda expression, change by context.Airports.find(x=>x.AirportId==3) Or you could the whole as a LINQ expression: var airport=select a from context.Airports where a.AirportId==3;一种方法是使用 lambda 表达式,通过 context.Airports.find(x=>x.AirportId==3) 更改或者您可以将整体作为 LINQ 表达式:var airport=select a from context.Airports where a.AirportId= =3; new Filght(){.... Aiport=airport }新的 Filght(){.... 机场=机场 }

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

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