基于我见过的所有示例,我希望现在已经解决了这个问题,但由于某种原因无法使映射正常工作。我一直收到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);
答案 0 :(得分:0)
我通过以下代码对其进行了解决:
CreateMap<Schedule, ScheduleDto>().ForMember(t => t.ScheduleData, opt => opt.Ignore()).AfterMap((s, t, c) =>
{
t.ScheduleData = c.Mapper.Map<MobileFormScheduleData, ScheduleDto>((MobileFormScheduleData)s.ScheduleData )
});