C# 引用EF中导航属性的父表

C# 引用EF中导航属性的父表,c#,entity-framework-4,navigation-properties,C#,Entity Framework 4,Navigation Properties,我基本上有三张带FK的桌子 制造 马克伊德 化名 模型 模型ID 型号名称 MakeId(FK) 车辆 车辆ID 购买日期 模型ID(FK) 我希望在不修改数据库的情况下从车辆中创建导航属性 我试过: public class Make { public int MakeId {get;set;} <snip>...</snip> public virtual Vehicle Vehicles {get;set;} } <sn

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

制造

  • 马克伊德
  • 化名
模型

  • 模型ID
  • 型号名称
  • MakeId(FK)
车辆

  • 车辆ID
  • 购买日期
  • 模型ID(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);
    }

}
公共类生成
{
public int MakeId{get;set;}
...
公共虚拟车辆{get;set;}
}
模型
公车
{
public int VehicleId{get;set}
...
公共虚拟制造车辆制造{get;set;}
}
公共类车辆地图:EntityTypeConfiguration
{
公共车辆地图()
{
this.HasKey(t=>t.VehicleId);
...
此.HasRequired(t=>t.VehicleMake)
.有许多(t=>t辆车)
.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:'函数(t)来自{t.MyProperty1, t、 MyProperty2}’


如何在不向数据库添加Vehicle.ModelId列的情况下在Make&Vehicle表上创建导航属性?

EF不支持该类型的建模。您可以创建一个围绕
模型的属性。但这可能会导致不必要的延迟加载

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

    [NotMapped]
    public virtual Make VehicleMake 
    {
        get { return Model.Make; }
        set { Model.Make = value; }
    }
}
公共级车辆
{
public int VehicleId{get;set}
...
[未映射]
公共虚拟汽车制造
{
获取{return Model.Make;}
设置{Model.Make=value;}
}
}

没关系,我理解这一点,但我如何才能让Make.Vehicles正确地映射?@NathanKoop也有同样的问题。你无法绘制地图。解决方法是查询数据库并在需要该属性时手动分配。感谢您的努力,我将做一些进一步的工作并在此处发布任何更新。