Желательная загрузка с помощью 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 не улучшился, или я не нашел лучшего способа сделать что-то.
Позвольте мне подчеркнуть, что я не предлагаю это как ответ, и это немного больно для комментария, я просто предлагаю переместить вашу мысль в другом направлении, что может помочь получить лучшее решение.