我正在尝试在CustomDtoMapper中映射2个复杂对象而无法执行此操作,因为第二个映射似乎不起作用。
从DtoInputEntity到EntityLine的第二个映射导致空值。没有任何值被分配。
这是我的CustomDtoMapper类:
internal static class CustomDtoMapper
{
private static volatile bool _mappedBefore;
private static readonly object SyncObj = new object();
public static void CreateMappings(IMapperConfigurationExpression mapper)
{
lock (SyncObj)
{
if (_mappedBefore)
{
return;
}
CreateMappingsInternal(mapper);
_mappedBefore = true;
}
}
private static void CreateMappingsInternal(IMapperConfigurationExpression mapper)
{
mapper.CreateMap<User, UserEditDto>()
.ForMember(dto => dto.Password, options => options.Ignore())
.ReverseMap()
.ForMember(user => user.Password, options => options.Ignore());
mapper.CreateMap<DtoInputEntity, Entity>()
.ForMember(entityCreateDto => entityCreateDto.OrderNumber,
dtoInputEntity => dtoInputEntity.MapFrom(input => input.Response.OrderNumber))
.ForMember(entityCreateDto => entityCreateDto.ShipmentNumber,
dtoInputEntity => dtoInputEntity.MapFrom(input => input.Response.ShipmentNumber));
mapper.CreateMap<DtoInputEntity, EntityLine>()
.ForPath(entityLineCreateDto => entityLineCreateDto.ExternalModelIdentifier, opt => opt.MapFrom(dtoInputEntity => dtoInputEntity.Response.UTModelIdentifier))
.ForPath(entityLineCreateDto => entityLineCreateDto.SKU, opt => opt.MapFrom(dtoInputEntity => dtoInputEntity.Response.ModelIdentifier))
.ForPath(entityLineCreateDto => entityLineCreateDto.ShipmentNumber, opt => opt.MapFrom(dtoInputEntity => dtoInputEntity.Response.ShipmentNumber))
.ForPath(entityLineCreateDto => entityLineCreateDto.LineNumber, opt => opt.MapFrom(dtoInputEntity => dtoInputEntity.Response.LineNumber));
}
}
答案 0 :(得分:0)
我已经创建了一个虚拟应用程序来测试您的问题,我似乎无法复制它。因此,我怀疑您的映射器实例管理可能有问题,而不是您的初始化。例如,您可能正在使用与初始化实例不同的实例(考虑到初始化程序是静态的,只执行一次)。
作为旁注,为什么使用ForPath,而不是ForMember?
我无法评论,否则,我会,而不是写一个答案。