簡體   English   中英

AutoMapper - Map 當目的地有對象列表時

[英]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);
        });

演示解決方案 1 @ .NET Fidde


解決方案 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>();

演示解決方案 2 @ .NET Fiddle

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM