如何用AutoMapper将EF Core扁平模型映射至嵌套Output结构?
实现方案
当然可以实现,以下是具体的配置和使用步骤:
1. 定义映射配置
创建AutoMapper的Profile类,配置实体到DTO的映射规则:
方式一:直接嵌套映射
public class EntityToOutputProfile : Profile { public EntityToOutputProfile() { CreateMap<YourEntity, Output>() // Id属性名称一致,AutoMapper会自动匹配,无需额外配置 .ForMember(dest => dest.Application, opt => opt.MapFrom(src => new NameAndVersion { Name = src.ApplicationName, Version = src.ApplicationVersion })); } }
方式二:拆分映射(更模块化)
先配置实体到NameAndVersion的映射,再配置到Output:
public class EntityToOutputProfile : Profile { public EntityToOutputProfile() { // 先配置实体到NameAndVersion的映射 CreateMap<YourEntity, NameAndVersion>() .ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.ApplicationName)) .ForMember(dest => dest.Version, opt => opt.MapFrom(src => src.ApplicationVersion)); // 再配置实体到Output的映射,直接复用上面的规则 CreateMap<YourEntity, Output>() .ForMember(dest => dest.Application, opt => opt.MapFrom(src => src)); } }
2. 在EF Core查询中使用ProjectTo
确保你已经在项目中注册了AutoMapper(比如通过依赖注入),然后在查询时调用ProjectTo方法:
// 假设_mapper是注入的IMapper实例,dbContext是你的EF Core上下文 var outputList = dbContext.YourEntities .ProjectTo<Output>(_mapper.ConfigurationProvider) .ToList();
或者直接传入IMapper实例:
var outputList = dbContext.YourEntities .ProjectTo<Output>(_mapper) .ToList();
关键说明
使用ProjectTo时,AutoMapper会将映射逻辑转换为EF Core可识别的SQL投影,只会查询需要的字段(Id、ApplicationName、ApplicationVersion),不会加载整个实体,保证查询性能。
内容的提问来源于stack exchange,提问作者Gargoyle
相关产品推荐
相关产品推荐

