У меня есть таблица "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.