Желательная загрузка с помощью ormlite servicestack

Это структура сущности:

var department = _context.Departments
                .Include(dep => dep.Employees.Select(emp => emp.ContactTypes))
                .SingleOrDefault(d => d.Id == departmentId);

Здесь я ожидаю, что один отдел будет возвращен, содержащий всех связанных сотрудников и все типы контактов для каждого сотрудника.

Это ormlite servicestack:

Я понятия не имею. Когда я смотрю на документ/образцы: https://github.com/ServiceStack/ServiceStack.OrmLite

Они пишут:

Прямо сейчас поддержка Expression может удовлетворять большинству простых запросов с помощью строго типизированного API. Для чего-либо более сложного (например, запросов с объединением таблиц) вы все равно можете легко вернуться к необработанным SQL-запросам, как показано ниже.

Я видел, что есть класс JoinSqlBuilder, но я не думаю, что он может возвращать вложенные коллекции.

Возможно, то, что я хочу, невозможно, но, возможно, я могу пойти на компромисс, как получить всех сотрудников для отдела. Затем я хочу, чтобы сотрудники и получили все типы контактов для определенного сотрудника. Создание иерархии и назначение списков по-прежнему будут моей работой.

Но я надеюсь, что есть более короткое решение.

Что также было бы хорошо, когда запрос, однако, выглядел бы как возвращающий объект (Dynamic?) с тремя плоскими свойствами: Department, Employees, ContactTypes и присваивать thoese свойства моему DTO.

Ответ 1

Хорошо, пожалуйста, не принимайте это как окончательный ответ, но больше всего я занимаюсь ситуацией (я не очень часто использую стек сервисов)...

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

То, что я закончил делать, было использовать auto-mapper, которые в основном сводят все многострочные циклы, которые я повсюду приводил к описанию отображения одной строки.

Конечно, мне все равно приходилось делать одно выражение о сопоставлении для каждого связанного свойства, но оно уменьшало код, который мне приходилось писать, и, что еще важнее, заставлял меня работать и работать до тех пор, пока EF не улучшился, или я не нашел лучшего способа сделать что-то.

Позвольте мне подчеркнуть, что я не предлагаю это как ответ, и это немного больно для комментария, я просто предлагаю переместить вашу мысль в другом направлении, что может помочь получить лучшее решение.