我正在尝试在遗留数据库上映射TPT继承层次结构(我无法更改列名称)。所有示例都具有同名父表和子表的主键。不幸的是,我的行为并不是这样。
作为简化示例:
Vehicle
----------------
VehicleId
Make
Model
----------------
Car
----------------
CarId
SomeOtherField
----------------
CarId和VehicleId实际上是相同的id,是应该用于关联表的值。是否支持在Code First中将其创建为TPT关系?
答案 0 :(得分:3)
Here是来自EF团队的关于此问题的声明:
不幸的是,现阶段无法做到这一点。我意识到这不是 一个很好的答案,但一个选项是创建一个重命名的视图 PK / FK列然后映射到那个。
它是从2011年2月开始的。所以它与早期的CTP版EF Code-First有关。但我相信EF 4.1中仍然不支持这种情况。
这里也有一个类似的问题,关于EF 4.1 Code-First的结果不令人满意:How can I use TPT inheritance models when primary keys have different names?
答案 1 :(得分:1)
我通过以下方式让这个工作:
那应该是这样做的。该链接指向EF中的样本解决方案。 RIA< - > Silverlight,它还显示了基础和派生类型中具有相同名称的属性的解决方法(该解决方案基本上只是在基本类型或派生类型中重命名该属性)。
答案 2 :(得分:0)
我在这里找到了这篇文章的答案:http://entityframework.codeplex.com/workitem/2087。根据您的情况,您需要:
在'protected override void OnModelCreating(DbModelBuilder modelBuilder)'中执行此操作:
modelBuilder.Entity() .ToTable( “汽车”) .Property(t => t.VehicleId).HasColumnName(“CarId”);