C# 引用EF中导航属性的父表
我基本上有三张带FK的桌子 制造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
- 马克伊德
- 化名
- 模型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也有同样的问题。你无法绘制地图。解决方法是查询数据库并在需要该属性时手动分配。感谢您的努力,我将做一些进一步的工作并在此处发布任何更新。