1

我基本上有三张带 FK 的桌子

制作

  • MakeId
  • 品牌名称

模型

  • 型号 ID
  • 型号名称
  • 制造商 (FK)

车辆

  • 车辆编号
  • 购买日期
  • 型号 ID (FK)

我想要一个从 Vehicle 到 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 => d.Model.MakeId' 无效。该表达式应表示一个属性:C#: 't => t.MyProperty' VB.Net: 'Function(t) t.MyProperty'。指定多个属性时使用匿名类型:C#: 't => new { t.MyProperty1, t.MyProperty2 }' VB.Net: 'Function(t) New From { t.MyProperty1, t.MyProperty2 }'。

如何在我的 Make & Vehicle 表上创建导航属性而不将 Vehicle.ModelId 列添加到我的数据库?

4

1 回答 1

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; }
    }
}
于 2012-07-17T15:02:17.043 回答