C# 实体框架6,不同的子属性共享相同的基本外键
我有一个类的层次结构,它是数据库中的TPH。因此我们有一个类C# 实体框架6,不同的子属性共享相同的基本外键,c#,entity-framework,fluent,tph,C#,Entity Framework,Fluent,Tph,我有一个类的层次结构,它是数据库中的TPH。因此我们有一个类Base,以及从中继承的子类。假设他们是ChildrenA,ChildrenB,ChildrenC Base类层次结构与另一个类层次结构(也用数据库中的TPH表示)具有概念关系,其中基类是RelatedBase,具有子类RelatedChildrenA,RelatedChildrenB,RelatedChildrenC 概念上的关系是: ChildrenA只能与RelatedChildrenA ChildrenB只能与RelatedC
Base
,以及从中继承的子类。假设他们是ChildrenA
,ChildrenB
,ChildrenC
Base
类层次结构与另一个类层次结构(也用数据库中的TPH表示)具有概念关系,其中基类是RelatedBase
,具有子类RelatedChildrenA
,RelatedChildrenB
,RelatedChildrenC
概念上的关系是:
只能与ChildrenA
RelatedChildrenA
只能与ChildrenB
RelatedChildrenB
只能与ChildrenC
RelatedChildrenC
MapKey
方法结合使用,以避免将外键id作为属性公开
因此,基本上,从一个TPH层次结构到另一个TPH层次结构只有一个外键
鉴于此外键在数据库中称为RelatedId,我尝试将我的fluent映射表示为:
ModelBuilder.Entity<ChildrenA>().HasOptional(e => e.RelatedChildrenA)
.WithOptionalDependent()
.Map(a => a.MapKey("RelatedId"));
ModelBuilder.Entity<ChildrenB>().HasOptional(e => e.RelatedChildrenB)
.WithOptionalDependent()
.Map(a => a.MapKey("RelatedId"));
ModelBuilder.Entity<ChildrenC>().HasOptional(e => e.RelatedChildrenC)
.WithOptionalDependent()
.Map(a => a.MapKey("RelatedId"));
ModelBuilder.Entity().has可选(e=>e.RelatedChildrenA)
.WithOptionalDependent()
.Map(a=>a.MapKey(“RelatedId”);
ModelBuilder.Entity().HasOptional(e=>e.RelatedChildrenB)
.WithOptionalDependent()
.Map(a=>a.MapKey(“RelatedId”);
ModelBuilder.Entity().HasOptional(e=>e.RelatedChildrenC)
.WithOptionalDependent()
.Map(a=>a.MapKey(“RelatedId”);
不幸的是,这会产生以下错误:
在模型生成过程中检测到一个或多个验证错误:
RelatedId:Name:类型中的每个属性名称都必须是唯一的。财产
名称“RelatedId”已定义。RelatedId:名称:每个属性
类型中的名称必须是唯一的。属性名称“RelatedId”已被删除
定义
是否可以将相同的子属性映射到相同的基外键?好的,看起来不可能。见:--