Я использую 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
Как я могу справиться с настройкой автоматического обработчика для извлечения коллекции объектов из другой коллекции, если нет гарантии, что исходная коллекция не равна нулю?