class 的自动映射器 IEnumerable<T> 未映射

Automapper IEnumerable<T> of class is not mapped

我使用 ASP.NET Core 2.2 和 Automapper 9.0.0。

我有以下 Order 模型 class:

public partial class Order
{
    public Order()
    {
        OrderItems = new HashSet<OrderItem>();
    }

    public int Id { get; set; }

    public DateTime DatePlaced { get; set; }

    public virtual ICollection<OrderItem> OrderItems { get; set; }
}

OrderDto class:

public class OrderDto
{
    public int Id { get; set; }

    public DateTime DatePlaced { get; set; }

    public IEnumerable<OrderItemsDto> Items { get; set; }

}

我已经编写了以下配置以从 dto 映射到 model class:

CreateMap<OrderItemsDto, OrderItem>()                
    .ForPath(dest => dest.Quantity, opt => opt.MapFrom(src => src.Quantity))
    .ForPath(dest => dest.TotalPrice, opt => opt.MapFrom(src => src.TotalPrice));


CreateMap<OrderDto, Order>()        
    .ForPath(dest => dest.DatePlaced, opt => opt.MapFrom(src => src.DatePlaced))        
    .ForPath(dest => dest.OrderItems, opt => opt.MapFrom(src => src.Items));
    // .ForMember(dest => dest.OrderItems, opt => opt.MapFrom(src => src.Items));

这是从 modeldto class:

的配置
CreateMap<OrderItem, OrderItemsDto>()
    .ForPath(dest => dest.Product.Name, opt => opt.MapFrom(src => src.Product.Name))
    .ForPath(dest => dest.Product.Price, opt => opt.MapFrom(src => src.Product.Price))
    .ForPath(dest => dest.Product.Category.Name, opt => 
        opt.MapFrom(src => src.Product.Category.Name))
    .ForPath(dest => dest.Quantity, opt => opt.MapFrom(src => src.Quantity))
    .ForPath(dest => dest.TotalPrice, opt => opt.MapFrom(src => src.TotalPrice));

CreateMap<Order, OrderDto>()
    .ForPath(dest => dest.DatePlaced, opt => opt.MapFrom(src => src.DatePlaced))
    .ForMember(dest => dest.Items, opt => opt.MapFrom(src => src.OrderItems));

然而,Items 始终为空,但 DatePlaced 已映射。

我得到以下结果:

[
    {
        "id": 1,
        "datePlaced": "2020-02-09T21:48:13.347",      
        "items": []
    }
]

returns数据的方法:

return _mapper.Map<IEnumerable<OrderDto>>(await _orderRepository.GetAll());

如何才能Items映射正确?

这是因为您缺少之间的映射 OrderItemsDto 和 OrderItem。 因此,Automapper 不知道如何映射集合中的项目。

添加映射 OrderItemsDto -> OrderItemOrderItem-> OrderItemsDto

应该可以解决问题。