首页 > 解决方案 > 用于嵌套项目集合的 AutoMapper

问题描述

我有以下模型:

public class Order
{
    public long OrderId { get; set; }

    public ICollection<Order_OrderItem> Order_OrderItems { get; set; }
}

public class Order_OrderItem
{
    public long OrderId { get; set; }

    public virtual Order Order { get; set; }

    public int OrderItemId { get; set; }

    public virtual OrderItem OrderItem { get; set; }
}

我在下面创建 DTO:

public class OrderDto
{
    public long OrderId { get; set; }

    public IEnumerable<OrderItemDto> OrderItems { get; set; }
}

我怎么能映射OrderOrderDto

我收到以下错误:

configuration.CreateMap<Order, OrderDto>()
    .ForMember(desc => desc.OrderItems,
        opt => opt.MapFrom(src => src.Order_OrderItems));

我检查了其他相关问题,建议与地图属性相关,但我OrderItems是一个集合属性。我怎么能映射它?

任何帮助,将不胜感激。

更新

更改配置如下:

configuration.CreateMap<Order_OrderItem, OrderItemDto>();
configuration.CreateMap<Order, OrderDto>()
    .ForMember(desc => desc.OrderItems,
        opt => opt.MapFrom(src => src.Order_OrderItems));

在检查结果时OrderItemsOrderDto是:null

var result = ObjectMapper.Map<OrderDto>(order);

标签: c#automapper

解决方案


OrderItem从到映射OrderItemDto

configuration.CreateMap<OrderItem, OrderItemDto>();

Order从到映射OrderDto

configuration.CreateMap<Order, OrderDto>()
    .ForMember(dest => dest.OrderItems,
        opt => opt.MapFrom(src => src.Order_OrderItems.Select(o => o.OrderItem)));

推荐阅读