You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用AutoMapper映射多层嵌套实体的属性?

解决AutoMapper多层嵌套实体映射失效问题

针对你遇到的多层嵌套属性映射失效问题,可按以下步骤排查修复:

1. 处理空引用(最常见原因)

如果映射链中任意对象(src.Mangueira 或 src.Mangueira.Fabricante)为null,会导致无法获取RazaoSocial。修改映射配置,添加空条件运算符(?.)避免空引用,同时正确传递null值:

cfg.CreateMap<MangueiraDaOrdemDeServico, MangueiraDaOrdemDeServicoDTO>()
    .ForMember(dest => dest.FabricanteNome, opt => opt.MapFrom(src => src.Mangueira?.Fabricante?.RazaoSocial));

2. 确认继承关系的映射配置

由于Mangueira继承自Equipamento,需确保AutoMapper能识别子类映射:

  • 如果MangueiraDaOrdemDeServico中的Mangueira属性是Equipamento类型,需在Equipamento的映射配置中包含子类:
// 假设存在Equipamento对应的DTO类
cfg.CreateMap<Equipamento, EquipamentoDTO>()
    .Include<Mangueira, MangueiraDTO>();
cfg.CreateMap<Mangueira, MangueiraDTO>();

3. 验证映射配置合法性

在应用启动时添加配置验证,快速定位配置错误:

// 初始化mapper后执行
mapper.ConfigurationProvider.AssertConfigurationIsValid();

如果存在未配置的属性或类型不匹配,会直接抛出异常提示问题。

4. 检查属性访问权限

确保以下属性均为public访问级别:

  • MangueiraDaOrdemDeServico.Mangueira
  • Equipamento.Fabricante(或Mangueira.Fabricante)
  • Fabricante.RazaoSocial
    AutoMapper默认仅能访问公共成员,私有/保护成员无法被映射。

5. 手动测试映射逻辑

创建测试数据验证映射是否正常工作:

// 构造测试实体
var fabricante = new Fabricante { RazaoSocial = "示例厂商" };
var mangueira = new Mangueira { Fabricante = fabricante };
var ordemServico = new MangueiraDaOrdemDeServico { Mangueira = mangueira };

// 执行映射
var dto = mapper.Map<MangueiraDaOrdemDeServicoDTO>(ordemServico);

// 检查结果
Console.WriteLine(dto.FabricanteNome); // 应输出"示例厂商"

如果测试正常,说明问题出在实际业务数据的空引用或加载问题(比如EF Core未Include关联数据)。

内容的提问来源于stack exchange,提问作者Guilherme Costa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 13:54:48