У меня есть древовидная структура в 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 поколения, но не больше. Как я загружаю все дерево всеми поколениями и дополнительными данными?
Когда вы используете Include ()
, вы просите Entity Framework преобразовать ваш запрос в SQL. Так что подумайте: как бы вы написали оператор SQL, который возвращает дерево произвольной глубины?
Ответ: Если вы не используете определенные функции иерархии вашего сервера базы данных (которые не являются стандартом SQL, но поддерживаются некоторыми серверами, такими как SQL Server 2008, хотя и не его поставщиком Entity Framework), вы бы этого не сделали. Обычным способом обработки деревьев произвольной глубины в SQL является использование модели вложенных множеств , а не модели родительского идентификатора.
Следовательно, есть три пути, которые вы можете использовать для решения этой проблемы: