Таблица закрытия ядра структуры сущности (Code First) - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть поиск в Интернете, чтобы создать таблицу для поддержки данных дерева или иерархических данных, но, похоже, она не предоставляет много информации.

Допустим, я хочу иметь таблицу Location, которая может ссылаться на себя, еслиесть родительский объект по другим данным о местоположении.

Как мне выполнить следующий запрос в ef-core?

  1. Список всех элементов местоположения в корне (dept = 0)
  2. Список всей иерархии местоположений.например ..
  • местоположение A
    • местоположение B
    • местоположение C
  • местоположениеD
    • местоположение E
      • местоположение J
    • местоположение F
      • местоположение K
      • местоположение L
  • местоположение M
Перечислите все дочерние местоположения под выбранным узлом и выберите уровень dept (например, 1, 2 или остальные). Перечислите все родительское местоположение под выбранным узлом и выберите уровень dept (ex 1, 2,или остальные).

Вот моя модель местоположения ...

public class Location
{
    public int Id { get; set; }

    [Required]
    public string Name { get; set; }

    public string Address { get; set; }

    public NpgsqlTsVector SearchVector { get; set; }
}

Пожалуйста, помогите или дайте какой-либо совет, чтобы начать, было бы неплохо.Я новичок в ядре dotnet и инфраструктуре сущностей.

Спасибо.

1 Ответ

0 голосов
/ 28 февраля 2019

Желаемая вами сущность выглядит примерно так:

public class Location
{
    public int Id { get; set; }
    [Required]
    public string Name { get; set; }
    public string Address { get; set; }
    public NpgsqlTsVector SearchVector { get; set; }
    public int? ParentId { get; set; }
    public Location Parent { get; set; }
}

? для ParentId - потому что у вашего корня нет родителей.Следовательно, корнем (или, возможно, корнями) является тот, у которого нет ParentId, а также другие части дерева могут быть определены по их ParentIds.

Обновление:

Что касается вопроса номер два, если вы хотите прочитать данные со структурой иерархии, к объекту также необходимо добавить другое свойство:

public virtual List<Location> Children { get; set; }

со следующей конфигурацией:

HasMany(c => c.Children).WithOptional(c => c.Parent).HasForeignKey(c => c.ParentId);

Следовательно, с помощью вышеуказанного объекта, просто выполнив db.Location.toList ();Ваш желаемый результат будет получен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...