validate objects formember custom complex .net automapper bidirectional

.net - objects - automapper validate



Automapper: mapeo bidireccional con ReverseMap() y ForMember() (2)

Tengo el caso en el que quiero asignar una entidad a un modelo de vista y volver. Tengo que especificar la asignación explícitamente con ForMember () porque sus propiedades no comparten los mismos nombres exactos. Aquí hay un breve ejemplo de cómo se ven mis clases:

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

Y quiero usarlos de esta manera:

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

Pero no coincide con la propiedad PartInteger to Integer. (El entero es 0.)

¿Hay alguna manera de hacer que esto funcione? (Cuando las propiedades de ambas clases tienen los mismos nombres, funciona.) ¿Tengo que establecer algún tipo de opción en el método ForMember ()?


Podrías definir tu configuración así:

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

ACTUALIZAR

Aquí está el commit donde ReverseMap fue implementado inicialmente. Por lo que puedo ver en el código, solo crea un mapeo inverso simple. Por ejemplo, en este caso configuraría automáticamente el equivalente de:

Mapper.CreateMap<PartTwoViewModel, PartTwo>();

Para obtener algo más complejo, me temo que tendrá que configurarlo manualmente.


ReverseMap devuelve una IMappingExpression que representa la inversión de la asignación. Una vez que llame, las llamadas subsiguientes serán para configurar la anulación del mapa.

Aquí hay un ejemplo:

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

Esto ignorará el campo de Pricing en la dirección inversa.