![](/img/trans.png)
[英](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.