[英]Realize Entity Framework one-to-one relation
我正在尝试使用Code First在Entity Framework中实现一对一的关系。 我想创建一个包含FlightPlan的飞机表。
飞机:
public class Airplane
{
[Key]
public int AirplaneId { get; set; }
public int Capacity { get; set; }
public AirplaneStatus AirplaneStatus { get; set; }
public int AmountOfPassengers { get; set; }
public int AirfieldId { get; set; }
public virtual FlightPlan FlightPlan { get; set; }
}
飞行计划:
public class FlightPlan
{
[Key]
[ForeignKey("Airplane")]
public int AirplaneId { get; set; }
public int AirfieldFrom { get; set; }
public int AirfieldTo { get; set; }
public int AmountOfPassengers { get; set; }
public virtual Airplane Airplane { get; set; }
}
当我使用Migrations初始化这些类时,将创建以下表结构:
在设法通过FlightPlan创建飞机之后,这需要一些解决方法,无论我尝试什么,飞机都没有Flightplan。
我该如何解决?
编辑
为了进行测试,我向每个更新的飞机添加了一个FlightPlan。 解决此问题后,将创建一条路线以添加飞行计划。 代码是:
var airplane = _context.Airplanes.Find(model.AirplaneId);
var flightplan = new FlightPlan() { AirfieldFrom = 1, AirfieldTo = 2, AmountOfPassengers = 30 };
airplane.FlightPlan = flightplan;
_context.SaveChanges();
解决我的问题的方法是在检索飞机时强制EF包括FlightPlan。
这很可能是由于您的FlightPlan
是virtual
而导致的延迟加载。
var airplane = db.Airplanes.First(); //pull airplane from db
var passengerAmount = airplane.FlightPlan.AmountOfPassengers //attempting to use
// FlightPlan property after pulling Airplane from db should load the FlightPlan
从数据库中拉出时,还可以强制EF包括FlightPlan
属性。
using System.Data.Entity;
var airplane = db.Airplanes.Include(m => m.FlightPlan).First();
应该通过以下方式完成:
public class Airplane
{
[Key]
public int Id { get; private set; }
public virtual FlightPlan FlightPlan { get; private set; }
// ... other properties
}
public class FlightPlan
{
[Key]
public int Id { get; private set; }
public virtual Airplane Airplane { get; private set; }
// ... other properties
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<FlightPlan>()
.HasRequired(flightPlan => flightPlan.Airplane)
.WithOptional(airplane => airplane.FlightPlan);
base.OnModelCreating(modelBuilder);
}
您的二传手当然可以是public
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.