Как оптимизировать LINQ-to-SQL для рекурсивных запросов? - PullRequest
1 голос
/ 06 июля 2011

У меня есть следующая таблица SQL:

 ObjectTable
--------------------------------------------------
|  ID      |  Name         |  Order  |  ParentID  |
|  int PK  |  nvarchar(50) |  int    |  int FK    |     

ObjectTable.ParentID - это пустое поле со связью с идентификатором другой записи объекта.LINQ-to-SQL генерирует класс, который выглядит следующим образом:

 public class DbObject{

      int ID { get; set; }

      string Name { get; set; }

      int Order { get; set; }

      int? ParentID { get; set; }

      DbObject Parent { get; set; }

      EntitySet<DbObject> ChildObjects { get; set; }

 }

Когда я загружаю экземпляр DbObject, мне нужно иметь возможность рекурсивного доступа к дочерним объектам, чтобы я мог записать данные виерархический объект JSON.

  • Буду ли я выполнять отдельный запрос каждый раз, когда получаю доступ к элементам через DbObject.ChildObjects?Поскольку транзакции с БД занимают больше всего времени, кажется, что это очень неэффективный способ загрузки рекурсивной иерархии.

  • Какова наилучшая практика для выполнения рекурсивного запроса с LINQ-to-SQL и / или EF?

  • Интегрирован ли LINQ-to-SQL с Общими выражениями таблиц ? Я нашел Выражение общих таблиц (CTE)в linq-to-sql?

1 Ответ

3 голосов
/ 06 июля 2011

в нашем случае мы создали хранимые процедуры с CTE и поместили их в конструктор l2s, и они работают как любая другая таблица, за исключением того, что они ведут себя как метод, а не как свойство, и до сих пор у нас не возникло никаких проблем с этим.

...