C# 如何使EF Core使用另一个键列返回分层数据(自引用表)

C# 如何使EF Core使用另一个键列返回分层数据(自引用表),c#,frameworks,entity,self-reference,C#,Frameworks,Entity,Self Reference,我有一个表“CatalogItem”,它具有自引用的ParentId关系。linq表达式返回CatalogItems树。但是我需要另一个Id列,例如NewId,而不是主键Id 表“目录项” Id(主键) 纽伊德 父ID 头衔 子项(目录项列表) =>ParentId-Id(PK)关系工作正常,linq返回一个树 =>ParentId-NewId关系,则linq语句只返回一个平面列表 EF核心-迁移: table.ForeignKey( name: "FK_CatalogItems_Cata

我有一个表“CatalogItem”,它具有自引用的ParentId关系。linq表达式返回CatalogItems树。但是我需要另一个Id列,例如NewId,而不是主键Id

表“目录项”

  • Id(主键)
  • 纽伊德
  • 父ID
  • 头衔
  • 子项(目录项列表)
=>ParentId-Id(PK)关系工作正常,linq返回一个树

=>ParentId-NewId关系,则linq语句只返回一个平面列表

EF核心-迁移:

table.ForeignKey(
name: "FK_CatalogItems_CatalogItems_ParentId",
column: x => x.ParentId,
principalTable: "CatalogItems",
principalColumn: "Id",
onDelete: ReferentialAction.Restrict);
EF核心-配置:

builder.HasOne(e => e.Parent)
.WithMany(e => e.Children)
.HasPrincipalKey(e => e.NewId)    // ???
.HasForeignKey(e => e.ParentId)
.OnDelete(DeleteBehavior.Restrict);
林克:

EF Core现在返回一个简单的CatalogItems列表,而不是CatalogItems的“树”。

解决方案是“NewId”不应为Null(able)(int?)。现在我将其设置为NotNull(int),并将Linq Qquery更改为:
return wait mCatalogContext.CatalogItems.Include(I=>I.Children)…
。解决方案是“NewId”不应为Null(able)(int?)。现在我将其设置为NotNull(int),并将Linq Qquery更改为:
return wait mCatalogContext.CatalogItems.Include(I=>I.Children)…
var tree = await mCatalogContext
.CatalogItems.Where(r => r.Id.Equals(id))
.SingleOrDefaultAsync();