I have the case where I want to map an entity to a viewmodel and back. I have to specify the mapping explicitly with ForMember()
because their properties do not share the exact same names. Here is a short example of how my classes look like:
public class PartTwo {
public int Integer { get; set; }
}
public class PartTwoViewModel {
public int PartInteger { get; set; }
}
And I want to use them this way:
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);
But it does not match the property PartInteger
to Integer
. (Integer
is 0
.)
Is there a way to make this work? (When the properties of both classes have the same names it works.) Do I have to set some kind of option in the method ForMember()
?
ReverseMap
returns an IMappingExpression
that represents the reversal of the mapping. Once you call, it subsequent calls will be for configuring the reversal of the map.
Here's an example:
Mapper.CreateMap<CartItemDto, CartItemModel>()
.ForMember(dest => dest.ExtendedCost, opt => opt.Ignore())
.ReverseMap()
.ForMember(dest => dest.Pricing, opt => opt.Ignore())
This will ignore the Pricing
field in the reverse direction.