从原始类型属性到子对象的映射

我试图将AutoMapper用于通常的情况Dto->实体。但是Dto的属性之一应该映射到我实体的孩子。

我的雇员DTO具有int类型JobTitleId的属性。 我的雇员实体有一个子实体JobTitle,它具有id属性。这是我要映射到的地方。总结起来就是这样:

EmployeeDto.JobTitleId ---> Employee.JobTitle.Id

对我唯一有用的方法是添加一个自定义Automapper解析器,但是当我需要在许多不同但相似的情况下进行此操作时,它会变得很讨厌。

class EmployeeDto
{
  int JobTitleId; 
}

Class Employee
{
  JobTitle jobTitle;
}

Class JobTitle
{
  int Id; 
}

我想要类似的东西:

public class EmployeeMapperProfiles : Profile
{
  public EmployeeMapperProfiles()
  {
    CreateMap<EmployeeDto,Employee>()
      .ForMember(dest => dest.JobTitle.Id,opt => opt.MapFrom(src => src.JobTitleId));    
  }
}

但是,我使用这种方法的结果是:

System.ArgumentException: 'Expression 'dest => dest.JobTitle.Id' must resolve to top-level member and not any child object's properties. You can use ForPath,a custom resolver on the child type or the AfterMap option instead. (Parameter 'lambdaExpression')'.

但是AfterMap和自定义解析器方法不是我想要的。 因此它必须是ForPath,但无法正常工作。

yamating 回答:从原始类型属性到子对象的映射

说明

异常消息告诉您不能为子对象属性指定自定义映射规则,如下所示:

CreateMap<EmployeeDto,Employee>()
    .ForMember(
        employee => employee.JobTitle.Id,options => options.MapFrom(employeeDto => employeeDto.JobTitleId));

这是因为仅支持顶级成员,对于更深层次的映射,您应该使用值解析器,类型转换器,显式路径配置或类型之间的其他映射之类的工具。

解决方案

要为Id中的Employee指定源属性,应使用已经弄清楚的路径配置。这样非常简单:

CreateMap<EmployeeDto,Employee>()
    .ForPath(
        employee => employee.JobTitle.Id,options => options.MapFrom(employeeDto => employeeDto.JobTitleId));
本文链接:https://www.f2er.com/3145563.html

大家都在问