Как сделать рекурсивную загрузку с платформой Объекта?

У меня есть древовидная структура в DB с таблицей TreeNodes. таблица имеет идентификатор узла, порожденный и parameterId. в EF, структура похожа на TreeNode. Дети, где каждым ребенком является TreeNode... У меня также есть таблица Tree с, содержат идентификатор, имя и rootNodeId.

В конце дня я хотел бы загрузить дерево в TreeView, но я не могу изобразить, как загрузить все это сразу. Я попробовал:

var trees = from t in context.TreeSet.Include("Root").Include("Root.Children").Include("Root.Children.Parameter")
        .Include("Root.Children.Children")
                        where t.ID == id
                        select t;

Это получит меня первые 2 поколения, но не больше. Как я загружаю все дерево всеми поколениями и дополнительными данными?

20
задан TylerH 2 September 2015 в 18:46
поделиться

1 ответ

Когда вы используете Include () , вы просите Entity Framework преобразовать ваш запрос в SQL. Так что подумайте: как бы вы написали оператор SQL, который возвращает дерево произвольной глубины?

Ответ: Если вы не используете определенные функции иерархии вашего сервера базы данных (которые не являются стандартом SQL, но поддерживаются некоторыми серверами, такими как SQL Server 2008, хотя и не его поставщиком Entity Framework), вы бы этого не сделали. Обычным способом обработки деревьев произвольной глубины в SQL является использование модели вложенных множеств , а не модели родительского идентификатора.

Следовательно, есть три пути, которые вы можете использовать для решения этой проблемы:

  1. Используйте модель вложенных множеств. Это требует изменения ваших метаданных.
  2. Используйте возможности иерархии SQL Server и взломайте Entity Framework, чтобы понять их (сложно, но этот метод может работать ). Опять же, вам нужно изменить свои метаданные. I
  3. Используйте явную загрузку или отложенную загрузку EF 4 вместо активной загрузки. Это приведет к множеству запросов к базе данных вместо одного.
4
ответ дан 30 November 2019 в 01:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: