Automapper - ReverseMap() не выполняет сопоставление
У меня есть следующие 2 класса:
public class ReferenceEngine
{
public Guid ReferenceEngineId { get; set; }
public string Description { get; set; }
public int Horsepower { get; set; }
}
public class Engine
{
public Guid Id { get; set; }
public string Description { get; set; }
public int Power { get; set; }
}
Я использую automapper, чтобы выполнить отображение из ReferenceEngine в Engine и наоборот. Обратите внимание, что свойства ReferenceEngineId
/Id
а также Horsepower
/Power
не имеет того же имени.
Работает следующая конфигурация сопоставления, и свойства с разными именами успешно сопоставляются:
public static void ConfigureMapperWorking()
{
AutoMapper.Mapper.CreateMap<ReferenceEngine, Engine>()
.ForMember(dest => dest.Description, opt => opt.MapFrom(src => src.Description)).ReverseMap();
AutoMapper.Mapper.CreateMap<ReferenceEngine, Engine>()
.ForMember(dest => dest.Id, opt => opt.MapFrom(src => Guid.Parse(src.ReferenceEngineId.ToString())))
.ForMember(dest => dest.Power, opt => opt.MapFrom(src => src.Horsepower));
AutoMapper.Mapper.CreateMap<Engine, ReferenceEngine>()
.ForMember(dest => dest.ReferenceEngineId, opt => opt.MapFrom(src => Guid.Parse(src.Id.ToString())))
.ForMember(dest => dest.Horsepower, opt => opt.MapFrom(src => src.Power));
}
Однако следующее не работает, хотя я вызываю метод ReverseMap()
в конце:
public static void ConfigureMapperNotWorking()
{
AutoMapper.Mapper.CreateMap<ReferenceEngine, Engine>()
.ForMember(dest => dest.Id, opt => opt.MapFrom(src => src.ReferenceEngineId))
.ForMember(dest => dest.Description, opt => opt.MapFrom(src => src.Description))
.ForMember(dest => dest.Power, opt => opt.MapFrom(src => src.Horsepower)).ReverseMap();
}
Мой вопрос заключается в том, что, когда имена свойств различаются, следует ли вручную указывать отображение TSource->TDestination и TDestination->TSource? Я думал, что цель ReverseMap
это чтобы мы не указывали двунаправленное отображение вручную.
1 ответ
ReverseMap создает только простое обратное отображение. Например, это автоматически настроит
Mapper.CreateMap<Engine, ReferenceEngine>();
от
Mapper.CreateMap<ReferenceEngine, Engine>();
Чтобы получить что-то более сложное, вы должны настроить это вручную.