Automapper Queryable отношение «многие ко многим» - PullRequest
0 голосов
/ 06 мая 2018

Я использую AutoMapper 6.1.1 (последняя стабильная версия) и борюсь с отображением отношений M: N. В схеме базы данных в сущностях также есть левая таблица L, правая таблица R и таблица ассоциаций A. Соответствующий класс A содержит L.id, L, R.id и R - как идентификаторы, так и навигационные свойства. Класс L содержит коллекцию A. Все с EF работает хорошо, ошибок нет.

С сервера я хочу вернуть какой-то LDto - он содержит информацию от L и коллекцию Rs. Поэтому я хочу извлечь свойство R из всех экземпляров A и передать их в DTO результата.

В настоящее время я использую этот способ:

 config.CreateMap<L, LDto>()
            .ForMember(dto => dto.Rs,
                opt => opt.MapFrom(x => x.As.Select(a => a.R)));

Где-то в служебной логике есть что-то вроде:

 lData.Where(l => l.code == "Code").Include(l => l.As.Select(....)).ProjectTo<LDto>;

Если есть данные повсюду и Include s для определенного отображения, это работает нормально. Однако нет никакой гарантии, что существует какой-либо экземпляр ассоциации A или не во всех случаях, когда я хочу загрузить вложенные структуры, и для ответа отлично подходит значение null.

В этом случае (или я полагаю, что это из-за отсутствия данных) я получаю эту ошибку:

 Value cannot be null.
 Parameter name: source

Я пробовал это (упрощенно):

 var queryable = getData(); //OK
 var list = queryable.ToList(); //OK
 var result = list.AsQueryable().ProjectTo<LDto>() --error mentioned above

Как я могу справиться с настройкой автоматического обработчика для извлечения коллекции объектов из другой коллекции, если нет гарантии, что исходная коллекция не равна нулю?

...