我有以下两个类:
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; }
}
Run Code Online (Sandbox Code Playgroud)
我正在使用 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));
}
Run Code Online (Sandbox Code Playgroud)
但是,尽管我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();
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,当属性名称不同时,我们是否应该手动指定 TSource->TDestination 和 TDestination->TSource 映射?我认为 的目的ReverseMap是避免我们手动指定双向映射。
ReverseMap 仅创建一个简单的反向映射。例如它会自动配置
Mapper.CreateMap<Engine, ReferenceEngine>();
Run Code Online (Sandbox Code Playgroud)
从
Mapper.CreateMap<ReferenceEngine, Engine>();
Run Code Online (Sandbox Code Playgroud)
要获得更复杂的内容,您必须手动配置它。
| 归档时间: |
|
| 查看次数: |
5659 次 |
| 最近记录: |