[英](AutoMapper) How to map an object which has a list of different objects?
[英]AutoMapper - Map when destination has a list of objects
我正在尝试使用 AutoMapper 到 map 域 model 到 ASP.NET 核心 Web API 中的 Dtos。
域名 class
public partial class Category
{
public Category()
{
Products = new HashSet<Product>();
}
public int Id { get; set; }
public int CategoryDiscount { get; set; }
public virtual ICollection<Product> Products { get; set; }
}
域产品 Class
public partial class Product
{
public int Id { get; set; }
public int CategoryId { get; set; }
public decimal Price { get; set; }
public virtual Category Category { get; set; } = null!;
}
DTO class
public class GetCategoryProductsDto
{
public int Id { get; set; }
public string CategoryName { get; set; } = string.Empty;
public int CategoryDiscount { get; set; }
public List<ProductDto> Products { get; set; }
}
映射器配置
CreateMap<Category, GetCategoryProductsDto>();
一切正常,但我想在扣除类别折扣后计算产品价格。
解决方案 1:使用.AfterMap()
要在映射后执行Price
计算,您可以使用.AfterMap()
。
CreateMap<Product, ProductDto>();
CreateMap<Category, GetCategoryProductsDto>()
.AfterMap((src,dest) =>
{
dest.Products.ForEach(x => x.Price -= src.CategoryDiscount);
});
解决方案 2:使用自定义值解析器
正如@Lucian 建议的那样, 自定义值解析器是处理Price
计算的另一种选择。
CreateMap<Product, ProductDto>()
.ForMember(
dest => dest.Price,
opt => opt.MapFrom((src, dest, member, context) => src.Price - src.Category.CategoryDiscount));
CreateMap<Category, GetCategoryProductsDto>();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.