asp.net - 如何使用 Automapper 映射复杂对象?
问题描述
我正在尝试在 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));
}
}
解决方案
我创建了一个虚拟应用程序来测试您的问题,但我似乎无法复制它。因此,我怀疑您的映射器实例管理可能有问题,而不是您的初始化。例如,您可能正在使用与您初始化的实例不同的实例(考虑到您的初始化程序是静态的,并且只执行一次)。
作为旁注,为什么使用 ForPath,而不是 ForMember?
我不能发表评论,否则,我会,而不是写一个答案。
推荐阅读
- sql - Oracle XML 需要 2 行数据值,而不是 1 行 XMLTYPE
- javascript - 使用javascript在qml webview中加载页面时出错
- mysql - 使用多个表和过滤器对 SQL 进行排名
- geocouch - GeoCouch 安装失败
- excel - 使用带有 VBA 的 google chorme 在同一选项卡中进行 URL 搜索
- python - 如何删除从我创建的分割地面实况掩码中伸出的奇数线?
- python - Python 的 Spacy 不返回令牌
- c# - 使用 C# 在 .NET Core 3 的静态类中使用 AutoMapper
- sql - LEFT JOIN - 主记录为空
- jquery - 按名称选择无线电阵列?