引用父表的导航属性在EF(Reference a parent table for a Naviga

2019-10-17 01:23发布

我基本上有三个表与FK的

使

  • MakeId
  • MakeName

模型

  • ModelId
  • 型号名称
  • MakeId(FK)

车辆

  • VehicleId
  • 购买日期
  • ModelId(FK)

我想从车辆的导航性能,而无需修改我的数据库,以使

我试过了:

public class Make
{
    public int MakeId {get;set;}
    <snip>...</snip>
    public virtual Vehicle Vehicles {get;set;}

}

<snip>Model</snip>

public class Vehicle
{
    public int VehicleId {get;set}
    <snip>...</snip>
    public virtual Make VehicleMake {get;set;}
}


public class VehicleMap : EntityTypeConfiguration<Vehicle>
{
    public VehicleMap()
    {
        this.HasKey(t => t.VehicleId);
        <snip>...</snip>
        this.HasRequired(t => t.VehicleMake)
        .WithMany(t => t.Vehicles)
        .HasForeignKey(t => t.Model.MakeId);
    }

}

我这样做,但是当我收到一个例外:

属性表达“d => d.Model.MakeId”是无效的。 表达应代表属性:C#: 'T => t.MyProperty' VB.Net: '函数(t)的t.MyProperty'。 当指定多个属性使用匿名类型:C#: 'T =>新的{t.MyProperty1,t.MyProperty2}' VB.Net: '函数(t)的新的从{t.MyProperty1,t.MyProperty2}'。

如何创建我的制作及车辆桌的导航属性不增加Vehicle.ModelId列到我的数据库?

Answer 1:

EF不支持这种类型的建模。 您可以创建一个围绕包装属性Model.Make如下。 但它可能会导致不必要的延迟加载。

public class Vehicle
{
    public int VehicleId {get;set}
    <snip>...</snip>

    [NotMapped]
    public virtual Make VehicleMake 
    {
        get { return Model.Make; }
        set { Model.Make = value; }
    }
}


文章来源: Reference a parent table for a Navigation Property in EF