Стремительная загрузка агрегатных корней с Entity Framework - PullRequest
3 голосов
/ 12 июня 2009

Я хотел бы создать более структурированный подход к загрузке необходимого дерева сущностей:

Мне нужен серьезный объем данных, поэтому я делаю это с использованием безопасных по типу включений (просто обычное включение, но с лямбда-символами) , как показано здесь .

Как я уже сказал, мне нужно много данных, в основном целое дерево сущностей под 1 родительским элементом.

Теперь я могу сделать что-то вроде:

context.House
    .Include(x => x.Doors)
    .Include(x => x.Doors.FirstOrDefault().Joint)
    .Include(x => x.Doors.FirstOrDefault().Joint.FirstOrDefault().JointCategory)
    .Include(x => x.Doors.FirstOrDefault().Joint.FirstOrDefault().JointCategory.JointType)
    .Include(x => x.Windows)
    // ... same thing
    .Include(x => x.Roof)
    // ... same thing

Как видите, эта строка, содержащая включения, может быть довольно большой. На самом деле это очень упрощенный пример кода (который не включает дома)

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

Это, вероятно, не имеет особого смысла, поэтому:

public void LoadHouse(int id)
{
    // ...
    ObjectQuery<House> query = context.House;

    // and now?
    LoadDoors(query, x => x.Door);

}

public void LoadDoors<T>(ObjectQuery<T> query, ..?..)
{
    // ... ?

    LoadJoints(...)


}

И так далее. Но я никак не могу разобраться с этим ... Отсутствует связь между входящим запросом и вызовом дочерних методов.

Кто-нибудь делал что-то подобное? Или кто-нибудь может дать мне несколько советов?

1 Ответ

2 голосов
/ 12 июня 2009

Попробуйте что-то вроде этого:

query = LoadDoors (query, x => x.Door);

Где LoadX возвращает результат вызова Include.

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