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));
这是从 model 到 dto 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 -> OrderItem
和
OrderItem-> OrderItemsDto
应该可以解决问题。
我使用 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));
这是从 model 到 dto 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 -> OrderItem
和
OrderItem-> OrderItemsDto
应该可以解决问题。