Automapper IEnumerable <T>класса не отображается - PullRequest
0 голосов
/ 23 апреля 2020

Я использую ASP. NET Core 2.2 и Automapper 9.0.0.

У меня есть следующий Order класс модели:

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 класс:

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

    public DateTime DatePlaced { get; set; }

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

}

Я написал следующие конфигурации для сопоставления с от до модель класс:

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));

и это конфигурация от модель до дто класс:

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": []
    }
]

Метод который возвращает данные:

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

Как можно Items правильно сопоставить меня?

1 Ответ

2 голосов
/ 23 апреля 2020

Это потому, что вам не хватает отображения между OrderItemsDto и OrderItem. Из-за этого Automapper не знает, как сопоставить элементы коллекции.

Добавление сопоставлений OrderItemsDto -> OrderItem и OrderItem-> OrderItemsDto

Должно решить проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...