Я использую 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
правильно сопоставить меня?