Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架6,不同的子属性共享相同的基本外键_C#_Entity Framework_Fluent_Tph - Fatal编程技术网

C# 实体框架6,不同的子属性共享相同的基本外键

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

我有一个类的层次结构,它是数据库中的TPH。因此我们有一个类
Base
,以及从中继承的子类。假设他们是
ChildrenA
ChildrenB
ChildrenC

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

概念上的关系是:

  • ChildrenA
    只能与
    RelatedChildrenA
  • ChildrenB
    只能与
    RelatedChildrenB
  • ChildrenC
    只能与
    RelatedChildrenC
我将实体框架fluent映射与
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”已被删除 定义


是否可以将相同的子属性映射到相同的基外键?

好的,看起来不可能。见:--