当前正在处理一些旧代码,从手动构建的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”
我已经以这种方式映射了许多其他类型,所以我对为什么这种类型不起作用感到困惑。毫无疑问,我错过了一些愚蠢而简单的事情,但是我看不到它是什么?
答案 0 :(得分:4)
您已经混淆了源类型和目标类型之间的顺序,请尝试以下操作:
var mappedJrc = Mapper.Map<JobRoleCompanyType,JobRoleCompanyTypeDto>(testJrc);
您还可以使用另一个接受object
参数作为输入并完全省略源类型的重载:
var mappedJrc = Mapper.Map<JobRoleCompanyTypeDto>(testJrc);