如何解决通过实体框架中的关系自动映射
作为automapper(v10.0.0)的新手,我正在尝试替换我的一个查询。我目前使用它来生成我的回复:
Car1 Car2 Value1 Value2
0 x y 0.1 0.5
1 x z 0.1 0.12
2 y z 0.5 0.12
3 x w 1.1 1.26
4 x y 1.1 0.7
5 w y 1.26 0.7
因此,我首先在var query = from a in _context.ApprovalStatuses.AsNoTracking()
.Include(x => x.ApprovalOrder).ThenInclude(x => x.Worker)
where a.RequestId == request.Id
orderby a.ApprovalOrder.Position
let w = a.ApprovalOrder.Worker
select new RequestApprovalStatusDTO {
AssignedUtc = a.AssignedUtc,Comments = a.Comments,DecisionDateUtc = a.ApprovedDateUtc ?? a.RejectedDateUtc,Email = w.Email,Name = w.Name,Uuid = a.Uuid
};
子类中创建映射:
Profile
然后我像这样重写查询:
CreateMap<ApprovalStatus,RequestApprovalStatusDTO>()
.ForMember(x => x.DecisionDateUtc,x => x.MapFrom(y => y.ApprovedDateUtc ?? y.RejectedDateUtc))
.ForMember(x => x.Email,x => x.MapFrom(y => y.ApprovalOrder.Worker.Email))
.ForMember(x => x.Name,x => x.MapFrom(y => y.ApprovalOrder.Worker.Name));
在运行时,它告诉我
AutoMapperMappingException:缺少类型映射配置或不支持的映射。
映射类型: 对象-> RequestApprovalStatusDTO
System.Object-> BoltOn.RequestApprovalStatusDTO
lambda_method(Closure,object,RequestApprovalStatusDTO,ResolutionContext)
我了解它告诉我它不知道如何从var query = _context.ApprovalStatuses
.Include(x => x.ApprovalOrder)
.ThenInclude(x => x.Worker)
.Where(x => x.RequestId == request.Id)
.OrderBy(x => x.ApprovalOrder.Position);
return Ok(_mapper.Map<RequestApprovalStatusDTO>(query));
进行转换,但是由于object
是query
,所以我不确定为什么要这样做。
解决方法
感谢露西安的指针,我得以像这样解决它:
var query = _context.ApprovalStatuses
.Where(x => x.Request.Uuid == uuid)
.OrderBy(x => x.ApprovalOrder.Position);
var approvals = await _mapper.ProjectTo<RequestApprovalStatusDTO>(query).ToArrayAsync();
if (approvals.Length == 0)
return NotFound();
return Ok(approvals);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。