Automapper - ReverseMap()不执行映射

6

我有以下两个类:

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个回答

5
ReverseMap只创建简单的反向映射。例如,它将自动配置。
Mapper.CreateMap<Engine, ReferenceEngine>();

来自

Mapper.CreateMap<ReferenceEngine, Engine>();

要获得更复杂的内容,您必须手动进行配置。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接