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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 13:55:21