代码之家  ›  专栏  ›  技术社区  ›  Bob Tway

automapper无法将简单DTO转换为

  •  2
  • Bob Tway  · 技术社区  · 6 年前

    目前正在处理一些遗留代码,从手工构建的DTO改为使用automapper。直到我来到这个相对简单的班级:

    public class JobRoleCompanyTypeDto
    {
        public int Id { get; set; }
        public string Description { get; set; }
        public string ResourceDescription { get; set; }
    }
    

    我们使用本地化,一些字符串需要转换,因此我将其添加到automapper配置中,正如我对其他此类属性所做的那样:

    cfg.CreateMap<JobRoleCompanyType, JobRoleCompanyTypeDto>()
       .ForMember(dto => dto.Description, opt => opt.MapFrom(jrc => jrc.Description.Translate()));  
    

    但当我真正来测试它时:

    JobRoleCompanyType testJrc = _context.JobRoleCompanyTypes.First();
    var mappedJrc = Mapper.Map<JobRoleCompanyTypeDto, JobRoleCompanyType>(testJrc);
    

    它拒绝编译,给出了错误

    无法从“MyNamespace.Entity.Model.JobRoleCompanyType”转换为“MyNamespace.Dal.Model.JobRoleCompanyTypedto”

    我已经用这种方法绘制了很多其他类型的地图,所以我很困惑为什么这一个不起作用。毫无疑问,我错过了一些愚蠢和简单的事情,但我看不到它是什么?

    1 回复  |  直到 6 年前
        1
  •  4
  •   YuvShap    6 年前

    您混淆了源类型和目标类型之间的顺序,请尝试以下操作:

    var mappedJrc = Mapper.Map<JobRoleCompanyType,JobRoleCompanyTypeDto>(testJrc);
    

    您还可以使用另一个接受 object 参数作为输入并操作源类型:

    var mappedJrc = Mapper.Map<JobRoleCompanyTypeDto>(testJrc);