You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用AutoMapper映射多对多实体中的列表(ProjectDto转Project)

解决ProjectDto到Project的映射问题

你当前的映射失败是因为AutoMapper无法自动将StyleDto直接转换为StyleOfProject,两者类型完全不匹配,需要手动定义转换逻辑,步骤如下:

1. 先定义基础映射

首先要创建StyleDto到Style的映射规则,这是后续转换的基础:

CreateMap<StyleDto, Style>();

2. 修改Project映射逻辑

在ProjectDto到Project的映射中,需要将Styles集合中的每个StyleDto先转换为Style实体,再包装成中间实体StyleOfProject:

CreateMap<ProjectDto, Project>()
    .ForMember(dest => dest.StylesOfProject, opt => opt.MapFrom(src => 
        // 处理空集合,避免空引用异常
        src.Styles?.Select(styleDto => new StyleOfProject 
        { 
            // 使用AutoMapper将StyleDto映射为Style
            Style = Mapper.Map<Style>(styleDto) 
        }) ?? Enumerable.Empty<StyleOfProject>()
    ));

补充说明

  • ProjectId无需手动赋值:当你将映射后的Project保存到数据库时,EF Core会自动维护StyleOfProject中的ProjectId(因为StyleOfProject与Project是关联实体)。
  • 如果你的AutoMapper版本是9.0+,建议使用注入的IMapper实例调用_mapper.Map<Style>(styleDto),替代静态的Mapper.Map以避免静态依赖问题。

内容的提问来源于stack exchange,提问作者Drompai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 02:48:24