Стремитесь загрузить таблицу со ссылками - PullRequest
9 голосов
/ 11 сентября 2009

У меня есть стандартная таблица собственных ссылок Categories. В моей модели сущности я сделал ассоциации Children и Parent. Можно ли загрузить весь объект Category без ленивой загрузки?

если я использую код ниже, он загружается только на второй уровень.

db.Categories.MergeOption = System.Data.Objects.MergeOption.NoTracking;

var query = from c in db.Categories.Include("Children")
            where c.IsVisible == true
            orderby c.SortOrder, c.Id
            select c;

Можно ли загрузить ссылки, если у меня уже есть все объекты категории?

Один из способов загрузить его - добавить свойство Children несколько раз

db.Categories.Include("Children.Children.Children.Children.Children")

но это генерирует очень длинный безумный код T-SQL, а также не делает то, что я хочу.

Ответы [ 3 ]

1 голос
/ 14 сентября 2009

Нет, это невозможно. Обратите внимание: все запросы LINQ to Entities переводятся в SQL. Какой оператор SQL включает в себя неограниченную глубину в иерархии самоссылки? В стандартном SQL его нет. Если для этого есть расширение в T-SQL, я не знаю, что это такое, и я не думаю, что провайдеры EF тоже.

1 голос
/ 14 сентября 2009

Хорошо, вы можете использовать метод Load.

 if (!category.Children.IsLoaded)
        category.Children.Load();

Конечно, сущность категории должна отслеживаться ObjectContext.

Здесь есть лучшее объяснение как работает структура объектов, работает с рекурсивными иерархиями, включает, кажется, не делает .

0 голосов
/ 20 февраля 2018

Один из способов, который я использовал для реализации того, что если у меня есть несколько сущностей, которые я хочу получить для всех дочерних таблиц, это использование рекурсивных cte и хранимых процедур для получения идентификаторы с использованием Entity FrameWork: Вот код с использованием Entity Framework и первый подход к коду

...