Я пытаюсь сопоставить свойство пользовательского типа в DTO из одного из нескольких различных свойств навигации исходной сущности, в зависимости от того, какое из них не равно нулю.
Упрощенная версия (некоторые из условные карты удалены):
CreateMap<MyDTO, MyEntity>()
.ForMember(dest => dest.Order,
opt =>
{
opt.MapFrom(src => src.OrderType1 != null ? src.OrderType1 :
src.OrderTypeA.OrderType1 != null ? OrderTypeA.OrderType1 :
src.OrderType2 != null ? src.OrderType2 : null
));
Не скомпилируется, поскольку сущность OrderType2 имеет тип, отличный от OrderType1
Тип условного выражения не может быть определен, так как нет неявное преобразование между OrderType1 и OrderType2
Я попытался создать пустой тип, у которого оба типа сущностей наследуются от этого, а затем приведен к базовому типу в условном выражении. Это вызывает исключение, потому что у него есть несопоставленные типы для всех свойств.
Предположим, я мог бы реорганизовать использование базового класса в свойствах навигации повсюду и создать отображение от базового к производному для каждой сущности, чтобы заставить это работать, но чувствовать это внесло бы слишком много изменений.
Существует ли альтернативный подход к этому с использованием Automapper или другого способа решения проблемы - иметь несколько условий, которые могут возвращать различные типы источников для сопоставления?