【发布时间】:2020-04-23 16:24:31
【问题描述】:
我使用 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; }
}
我编写了以下配置来从 dto 映射到 model 类:
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));
这是从 model 到 dto 类的配置:
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如何才能正确映射?
【问题讨论】:
-
您尚未为
OrderItemsDto创建映射 ->OrderItem(或者您尚未显示)。另外,应该是OrderItemDto(单)而不是OrderItemsDto(复数)? -
@John 请看我更新的问题
-
您是否有理由手动为所有这些同名字段设置映射?
CreateMap<Order, OrderDto>(); CreateMap<OrderItemsDto, OrderItem>();本身还不够吗? -
@John 不,没有理由。如果可以的话,我会尝试删除它们。
标签: c# automapper