在EF中引用导航属性的父表

时间:2012-07-17 14:33:15

标签: c# entity-framework-4 navigation-properties

我基本上有三张FK的桌子

制作

  • MakeId
  • MakeName

模型

  • ModelId
  • MODELNAME
  • MakeId(FK)

车辆

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

我想在不修改数据库的情况下从Vehicle to Make导航属性

我试过了:

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 =&gt; d.Model.MakeId'无效。该   表达式应该代表一个属性:C#:'t =&gt; t.MyProperty”   VB.Net:'Function(t)t.MyProperty'。指定多个时   属性使用匿名类型:C#:'t =&gt;新{t.MyProperty1,   t.MyProperty2}'VB.Net:'函数(t)新来自{t.MyProperty1,   t.MyProperty2}'。

如何在Make&amp; amp;中创建导航属性?没有将Vehicle.ModelId列添加到我的数据库的车辆表?

1 个答案:

答案 0 :(得分:2)

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