如何使用AutoMapper将Company与Employee列表映射到CompanyProfileDto?
如何为CompanyProfileDto添加Employee列表映射?
基于你已有的AutoMapper配置,因为Company模型本身没有关联的Employees集合属性,可通过以下方式完成Employees字段的映射:
方式一:映射时传入已获取的员工列表
如果在映射前已经拿到了当前公司对应的员工数据,可以通过AfterMap在映射完成后手动赋值:
// 假设已获取目标公司和对应员工列表 var targetCompany = GetCompanyById(companyId); var companyEmployees = GetEmployeesByCompanyId(companyId); // 执行映射 var companyProfileDto = _mapper.Map<CompanyProfileDto>(targetCompany, opt => opt.AfterMap((src, dest) => dest.Employees = _mapper.Map<List<EmployeeDto>>(companyEmployees)));
方式二:在映射配置中自动关联数据源
如果希望通过数据源(比如数据库)自动获取对应员工,可以在映射配置中注入数据上下文,通过MapFrom指定员工列表的来源:
public class YourMappingProfile : Profile { private readonly YourDbContext _dbContext; // 通过构造注入获取数据库上下文 public YourMappingProfile(YourDbContext dbContext) { _dbContext = dbContext; // 保留已有的基础映射 CreateMap<Employee, EmployeeDto>(); // 扩展Company到CompanyProfileDto的映射 CreateMap<Company, CompanyProfileDto>() .ForMember(dest => dest.Employees, opt => opt.MapFrom(src => _dbContext.Employees.Where(e => e.CompanyId == src.CompanyId))); } }
补充:若Company模型包含导航属性
如果后续给Company模型添加Employees导航属性:
public class Company { public int CompanyId { get; set; } public string CompanyName { get; set; } public List<Employee> Employees { get; set; } // 新增导航属性 }
那么你现有的基础配置就足够完成自动映射,AutoMapper会识别同名的集合属性并自动转换为EmployeeDto列表,无需额外修改配置。
注:AutoMapper会自动处理集合类型的映射,只要你已配置好单个实体的映射规则(
Employee→EmployeeDto),集合的转换会自动完成。
内容的提问来源于stack exchange,提问作者AJames
相关产品推荐
相关产品推荐

