如何用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
相关产品推荐
相关产品推荐

