C# 实体框架核心:无外键的单向导航属性

C# 实体框架核心:无外键的单向导航属性,c#,asp.net-core,entity-framework-core,entity-framework-core-3.1,C#,Asp.net Core,Entity Framework Core,Entity Framework Core 3.1,我的类配置如下所示: 类项目{ Guid ParentId{get;set;} // ... } 类ClassWithItemCollectionA{ Guid Id{get;set;} ICollection项{get;set;} // ... } 类ClassWithItemCollectionB{ Guid Id{get;set;} ICollection项{get;set;} // ... } 我想填充ClassWithItemCollectionA.Items和ClassWithI

我的类配置如下所示:

类项目{
Guid ParentId{get;set;}
// ... 
}
类ClassWithItemCollectionA{
Guid Id{get;set;}
ICollection项{get;set;}
// ...
}
类ClassWithItemCollectionB{
Guid Id{get;set;}
ICollection项{get;set;}
// ...
}
我想填充
ClassWithItemCollectionA.Items
ClassWithItemCollectionB.Items
导航属性,将实体与
Item.ParentId->ClassWithItemCollectionA.Id
Item.ParentId->ClassWithItemCollectionB.Id
连接起来

我尝试过不同的方法,但最终得到了不理想的结果

  • 如果我让EF Core创建导航属性,它会为我添加
    项的每个实体类型创建一个额外的列
  • 如果我强制EF Core使用ParentId作为外键,它将创建数据库模式,而不创建额外的列,但会创建额外的约束,阻止我在
    表中插入任何内容
  • 我可以取消映射
    集合,并对每个
    类使用itemcollectionx
    进行额外的查询,从而产生N+1问题
有没有办法定义这样的基类:

类BaseClassWithItemCollection{
Guid Id{get;set;}
ICollection项{get;set;}
}

然后指定如何检索
集合,或者以任何其他方式获取我要查找的内容?

删除ParentId,因为您不知道它引用的是什么实体类型,所以它是无用的。或者,您可以重构以实现“每个层次结构的表”,如下所述:公开ParentId的原因是为了有一种将项附加到通用实体的方法。这些“ClassWithItemCollectionX”只是一些特殊情况,我想直接包含这些项目,而不需要额外的查询。由于这些实体高度异构,TPH方法似乎也不理想(