2015-11-06 218 views
4

我有以下2类:Automapper - ReverseMap()不执行映射

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的映射引擎,反之亦然。请注意,属性ReferenceEngineId/IdHorsepower/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的目的是为了避免我们手动指定双向映射。

回答

3

ReverseMap仅创建一个简单的反向映射。例如它会自动从

Mapper.CreateMap<ReferenceEngine, Engine>(); 

配置

Mapper.CreateMap<Engine, ReferenceEngine>(); 

得到任何东西更复杂的你,必须手动配置它。