我正在尝试学习自动映射器(版本10.0.0),并且正在设置我的DTO输入对象成为Entity Framework模型对象,所以我这样做了:
CreateMap<RequestInputDTO, Request>()
.ForMember(x => x.RequestedById, x => x.Ignore())
.ForMember(x => x.RequestedForId, x => x.Ignore())
.ForMember(x => x.OrgHierarchyId, x => x.Ignore())
.AfterMap((src, dst) => {
dst.Uuid = Guid.NewGuid();
dst.RequestedUtc = DateTime.UtcNow;
});
到目前为止,该部分工作正常。但是,对于我要忽略的这三个属性,我必须进行数据库查找。例如,他们给我发送了一个名称,我获取了相应记录的ID,然后将其用作ID。因此,当我收到请求时,我正在这样做:
var request = _mapper.Map<Request>(dto);
request.RequestedById = await WwidToIdAsync(dto.RequestedByWwid);
request.OrgHierarchyId = await OrgHierarchyNumberToIdAsync(dto.RequestedForOrgHierarchyCode);
request.RequestedForId = await WwidToIdAsync(dto.RequestedForWwid);
虽然这似乎做对了,但我不喜欢从自动映射断开这三个项目。某人忘了这样做太容易了。由于AfterMap
不同步,我无法弄清楚如何在映射过程中自动处理三行。