C# 如何使EF Core使用另一个键列返回分层数据(自引用表)
我有一个表“CatalogItem”,它具有自引用的ParentId关系。linq表达式返回CatalogItems树。但是我需要另一个Id列,例如NewId,而不是主键Id 表“目录项”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
- Id(主键)
- 纽伊德
- 父ID
- 头衔
- 子项(目录项列表)
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();