У меня есть следующая таблица 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?