Как включить в EF Core возврат иерархических данных (таблицы с самореференциями) с помощью другого KeyColumn - PullRequest
1 голос
/ 05 июня 2019

У меня есть таблица "CatalogItem" с самоотносительной связью ParentId-Id. Выражение linq возвращает дерево CatalogItems. Но мне нужен другой столбец Id, например NewId, а не идентификатор первичного ключа.

Таблица "CatalogItems"

  • Id (PK)
  • NewID
  • ParentId
  • Название
  • ...
  • Дети (Список CatalogItem)

=> ParentId - отношение Id (PK) работает нормально, а linq возвращает дерево.

=> ParentId - отношение NewId, тогда оператор linq возвращает только плоский список.

EF Core - миграция:

table.ForeignKey(
name: "FK_CatalogItems_CatalogItems_ParentId",
column: x => x.ParentId,
principalTable: "CatalogItems",
principalColumn: "Id",
onDelete: ReferentialAction.Restrict);

EF Core - Конфигурация:

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

Linq:

var tree = await mCatalogContext
.CatalogItems.Where(r => r.Id.Equals(id))
.SingleOrDefaultAsync();

EF Core теперь возвращает простой список CatalogItems, а не «дерево» CatalogItem.

...