2

我有一个类层次结构,即数据库中的 TPH。所以我们有一个类Base,子类继承自它。假设它们是ChildrenA, ChildrenB, ChildrenC

Base层次结构与另一个类层次结构(也在数据库中的 TPH 中表示)具有概念上的关系,其中基类是RelatedBase,具有子类RelatedChildrenARelatedChildrenBRelatedChildrenC

概念关系是:

  • 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”。

这是否有可能将相同的子属性映射到相同的基本外键?

4

0 回答 0