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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 04:05:12