Automapper для работы с вложенным базовым классом с двумя подтипами для плоского Dto - PullRequest
0 голосов
/ 08 мая 2018

Основываясь на всех примерах, которые я видел, я ожидал, что это уже решено, но по какой-то причине не могу заставить работать отображение.Я продолжаю получать Missing type map configuration or unsupported mapping. исключение.Использование Automapper 4.2.1

Вот мои классы:

public class Schedule
{
  public ScheduleData ScheduleData { get; set; }
}

// Base type
public abstract class ScheduleData {}

// Sub Types
public class ActionItemScheduleData : ScheduleData {}
public class FormScheduleData : ScheduleData {}

Вот отображение.Я пошел с AfterMap() подходом и разбил сопоставления по типу.Я не думал, что должен был сделать это, но я получил вышеупомянутую ошибку, когда я только сопоставил базовый тип.Даже при таком подходе с if / else я все равно получаю ошибку.Это из-за моей версии Automapper?

public class ScheduleMapper : Profile
{
    protected override void Configure()
    {
        CreateMap<ActionItemScheduleData, ScheduleDto>(MemberList.Destination)
            .ForMember(x => x.Name, c => c.MapFrom(m => m.ActionDescription));

        CreateMap<MobileFormScheduleData, ScheduleDto>(MemberList.Destination)
            .ForMember(x => x.Name, c => c.MapFrom(m => m.Description));

        CreateMap<Schedule, ScheduleDto>(MemberList.Destination)
            .AfterMap((s, d) => 
            {
                if (s.ScheduleData is MobileFormScheduleData)
                {
                    Mapper.Map((MobileFormScheduleData) s.ScheduleData, d);
                }
                else
                {
                    Mapper.Map((ActionItemScheduleData) s.ScheduleData, d);
                }
           });

    }
}

Вот как я это называю:

 var scheduleDto = mapper.Map<ScheduleDto>(schedule);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...