我有这样的情况,我想将实体映射到viewmodel并返回。我必须使用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属性不匹配。 (整数为0。)
有没有办法让这项工作? (当两个类的属性具有相同的名称时,它会起作用。)我是否必须在ForMember()方法中设置某种选项?
答案 0 :(得分:136)
ReverseMap
返回IMappingExpression
,表示映射的反转。一旦你打电话,后续的电话将用于配置地图的反转。
以下是一个例子:
Mapper.CreateMap<CartItemDto, CartItemModel>()
.ForMember(dest => dest.ExtendedCost, opt => opt.Ignore())
.ReverseMap()
.ForMember(dest => dest.Pricing, opt => opt.Ignore())
这将忽略反方向的Pricing
字段。
答案 1 :(得分:48)
您可以像这样定义配置:
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));
<强>更新强>
以下the commit最初实施了ReverseMap
。从我在代码中看到的,它只创建一个简单的反向映射。例如,在这种情况下,它会自动配置相当于:
Mapper.CreateMap<PartTwoViewModel, PartTwo>();
为了让任何事情变得更复杂,我担心你将不得不手动配置它。