Automapper:使用ReverseMap()和ForMember()双向映射

我有这种情况,我想将一个实体映射到一个视图模型,然后返回。 我必须使用ForMember()明确指定映射,因为它们的属性不共享完全相同的名称。 下面是我的类如何的一个简短的例子:

public class PartTwo { public int Integer { get; set; } } public class PartTwoViewModel { public int PartInteger { get; set; } } 

我想用这种方式:

 Mapper.CreateMap<PartTwo, PartTwoViewModel>() .ForMember(dst => dst.PartInteger, opt => opt.MapFrom(src => src.Integer)) .ReverseMap(); var partTwoViewModel = new PartTwoViewModel() { PartInteger = 42 }; var partTwo = Mapper.Map<PartTwoViewModel, PartTwo>(partTwoViewModel); Assert.AreEqual(partTwoViewModel.PartInteger, partTwo.Integer); 

但它与PartInteger到Integer的属性不匹配。 (整数是0)

有没有办法做到这一点? (当两个类的属性具有相同的名称时)我是否需要在ForMember()方法中设置某种选项?

你可以像这样定义你的configuration:

 Mapper.CreateMap<PartTwo, PartTwoViewModel>() .ForMember(dst => dst.PartInteger, opt => opt.MapFrom(src => src.Integer)); Mapper.CreateMap<PartTwoViewModel, PartTwo>() .ForMember(dst => dst.Integer, opt => opt.MapFrom(src => src.PartInteger)); 

UPDATE

这里是最初实现ReverseMap 的提交 。 从代码中我可以看到,它只创build一个简单的反向映射。 例如,在这种情况下,它会自动configuration相当于:

 Mapper.CreateMap<PartTwoViewModel, PartTwo>(); 

为了得到更复杂的东西,恐怕你将不得不手动configuration它。

ReverseMap返回一个表示映射反转的IMappingExpression 。 一旦你打电话,随后的电话将是configuration地图的逆转。

这是一个例子:

 Mapper.CreateMap<CartItemDto, CartItemModel>() .ForMember(dest => dest.ExtendedCost, opt => opt.Ignore()) .ReverseMap() .ForMember(dest => dest.Pricing, opt => opt.Ignore()) 

这将在相反方向忽略Pricing字段。