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>();

Чтобы получить что-то более сложное, вы должны настроить это вручную.

Другие вопросы по тегам