73

我有一种情况,我想将实体映射到视图模型并返回。我必须明确指定映射,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。(Integer0。)

有没有办法使这项工作?(当两个类的属性名称相同时,它可以工作。)我是否必须在方法中设置某种选项ForMember()

4

2 回答 2

160

ReverseMap返回一个IMappingExpression表示反转的映射。调用后,后续调用将用于配置地图的反转。

这是一个例子:

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

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

于 2013-08-28T13:57:57.693 回答
56

您可以像这样定义您的配置:

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

更新

这是最初实施的提交。ReverseMap从我在代码中可以看到,它只创建了一个简单的反向映射。例如,在这种情况下,它会自动配置等价于:

Mapper.CreateMap<PartTwoViewModel, PartTwo>();

要获得更复杂的东西,恐怕您将不得不手动配置它。

于 2012-11-21T10:30:15.293 回答