AutoMapper无法转换简单的DTO

时间:2019-02-01 10:04:34

标签: c# automapper

当前正在处理一些旧代码,从手动构建的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 个答案:

答案 0 :(得分:4)

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

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

您还可以使用另一个接受object参数作为输入并完全省略源类型的重载:

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