C#中如何通过AutoMapper实现导航属性的访问
实现从Order实体获取状态名称到OrderDto的方案
1. 修改OrderDto,添加状态名称字段
首先在OrderDto中新增StatusName属性,用来存储状态名称:
public class OrderDto { public Nullable<int> StatusId { get; set; } public string Name{ get; set; } // 新增状态名称字段 public string StatusName { get; set; } }
2. 配置AutoMapper映射规则
在AutoMapper的配置中,通过ForMember指定StatusName的映射来源为Order.Status.Name,同时处理Status为null的情况避免空引用异常:
cfg.CreateMap<Order, OrderDto>() // 将Order.Status.Name映射到OrderDto.StatusName .ForMember(dest => dest.StatusName, opt => opt.MapFrom(src => src.Status?.Name)) .ReverseMap(); // 反向映射保持原有规则即可,无需额外处理StatusName cfg.CreateMap<Status, StatusDto>().ReverseMap();
这里用了C#的空传播运算符?.,当src.Status为null时会直接返回null,避免抛出空引用异常。
3. 使用示例
完成配置后,直接调用AutoMapper的Map方法即可自动映射状态名称:
// 假设已通过依赖注入或其他方式获取IMapper实例 var order = new Order { Name = "20240501001", StatusId = 2, Status = new Status { Id = 2, Name = "待发货" } }; var orderDto = mapper.Map<OrderDto>(order); // 此时orderDto.StatusName的值为"待发货"
内容的提问来源于stack exchange,提问作者manora
相关产品推荐
相关产品推荐

