简体   繁体   English

Automapper IEnumerable<t> class 的未映射</t>

[英]Automapper IEnumerable<T> of class is not mapped

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

I have the following Order model class:我有以下Order model 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; }
}

and OrderDto class:OrderDto class:

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

    public DateTime DatePlaced { get; set; }

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

}

I've written the following configurations to map from dto to model class:我已将以下配置写入 map 从dtomodel 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));

and this is a configuration from model to dto class:这是从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));

However, the Items is always empty, but DatePlaced is mapped.但是, Items始终为空,但DatePlaced已映射。

I've got the following result:我得到以下结果:

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

The method which returns data:返回数据的方法:

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

How can Items can me mapped correctly?我如何才能正确映射Items

This is because you are missing the mapping between OrderItemsDto and OrderItem.这是因为您缺少 OrderItemsDto 和 OrderItem 之间的映射。 Because of that, Automapper doesn't know how to map the items of the collection.因此,Automapper 不知道如何 map 集合的项目。

Adding the mappings OrderItemsDto -> OrderItem and OrderItem-> OrderItemsDto添加映射OrderItemsDto -> OrderItemOrderItem-> OrderItemsDto

Should fix the problem.应该解决问题。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM