繁体   English   中英

实现实体框架一对一关系

[英]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。

这很可能是由于您的FlightPlanvirtual而导致的延迟加载。

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.

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