我有一个类层次结构,即数据库中的 TPH。所以我们有一个类Base
,子类继承自它。假设它们是ChildrenA
, ChildrenB
, ChildrenC
。
类Base
层次结构与另一个类层次结构(也在数据库中的 TPH 中表示)具有概念上的关系,其中基类是RelatedBase
,具有子类RelatedChildrenA
,RelatedChildrenB
,RelatedChildrenC
。
概念关系是:
ChildrenA
只能与RelatedChildrenA
ChildrenB
只能与RelatedChildrenB
ChildrenC
只能与RelatedChildrenC
我正在使用具有独立关联 MapKey
方法的实体框架流畅映射,以避免将外键 id 作为属性公开。
因此,基本上,从 TPH 层次结构到另一个 TPH 层次结构只有一个外键。
鉴于此外键在数据库中称为 RelatedId,我试图表达我的流畅映射如下:
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"));
不幸的是,这会产生以下错误:
在模型生成期间检测到一个或多个验证错误:RelatedId:名称:类型中的每个属性名称必须是唯一的。已定义属性名称“RelatedId”。RelatedId:名称:类型中的每个属性名称必须是唯一的。已定义属性名称“RelatedId”。
这是否有可能将相同的子属性映射到相同的基本外键?