Как я могу кодировать рекурсивный запрос в модели Entity Framework? - PullRequest
3 голосов
/ 30 мая 2010

У меня есть модель, которая включает в себя NODES и RELATIONSHIPS (которые связывают узлы вместе через расположение parent_node, child_node).

В1. Есть ли способ в EF / Linq-to-entity выполнить запрос к узлам (например, context.Nodes ..), чтобы найти, скажем, «все родители» или «или потомки» в графе?

Q2 - Если в Linq-to-entity нет ни одного, есть ли другой способ сделать это, кроме написания метода, который выполняется вручную и выполняется?

В3. Если руководство - единственный способ сделать это, следует ли мне беспокоиться о количестве обращений к базе данных, которые будут поступать в базу данных, поскольку метод продолжает повторять данные? Или, более конкретно, есть ли какая-либо особенность типа кэширования EF, которая могла бы помочь в обеспечении того, чтобы метод работал с точки зрения «количества обращений к базе данных»?

спасибо

спасибо

Ответы [ 2 ]

1 голос
/ 30 мая 2010

Когда вы используете Microsoft SQL Server 2005 или более позднюю версию, вы можете использовать CTE ( Общие табличные выражения ). Они позволяют вам определить рекурсивный запрос. Хотя SQL Server под прикрытием не делает для вас гораздо больше, чем запускает кучу запросов, он делает это полностью на стороне сервера, поэтому он избавляет вас от большого количества общения между клиентом и сервером.

Вам придется сделать это с помощью сохраненного процесса или обычного запроса SQL, потому что EF не может сделать это за вас.

1 голос
/ 30 мая 2010

Не существует такого изящного способа поднять дерево. Вы можете (в хранимой процедуре или в платформе сущностей) создать цикл, который будет выполняться до тех пор, пока не произойдет никаких изменений, и в этой итерации вы будете связывать родительский и дочерний дочерние элементы в некоторой временной таблице или коллекции. в конце концов у вас будет коллекция родителей, наследник двух человек.

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