当前正在处理一些遗留代码,从手动构建的 DTO 更改为使用 Automapper。一切都很顺利,直到我来到这个相对简单的类(class):
public class JobRoleCompanyTypeDto
{
public int Id { get; set; }
public string Description { get; set; }
public string ResourceDescription { get; set; }
}
我们使用本地化,并且某些字符串需要翻译,因此我将其添加到自动映射器配置中,就像我对其他此类属性所做的那样:
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);
它拒绝编译,给出错误
cannot convert from 'MyNamespace.Entity.Model.JobRoleCompanyType' to 'MyNamespace.DAL.Model.JobRoleCompanyTypeDto'
我已经用这种方式映射了很多其他类型,所以我很困惑为什么这个不起作用。毫无疑问,我错过了一些愚蠢而简单的东西,但我看不到它是什么?
最佳答案
您混淆了源类型和目标类型之间的顺序,请尝试以下操作:
var mappedJrc = Mapper.Map<JobRoleCompanyType,JobRoleCompanyTypeDto>(testJrc);
您还可以使用另一个接受 object
参数作为输入并完全省略源类型的重载:
var mappedJrc = Mapper.Map<JobRoleCompanyTypeDto>(testJrc);
关于c# - AutoMapper 无法转换简单的 DTO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54477127/