[英]Automapper child mapping with entity in the middle
我有以下要映射到Dto的实体结构
上下文实体
public class CallPoint
{
public int Id { get; set; }
public string Name {get; set;}
public ICollection {UserCallPoint} UserCallPoints {get; set;}
}
public class UserCallPoint
{
public int Id {get; set;}
public CallPoint CallPoint {get; set;}
public User User {get; set;
}
public class User
{
public int Id {get; set;}
public string Email {get; set;}
public ICollection<UserCallPoint> UserCallPoints {get; set;
}
DTO
public class CallPointDto
{
public int Id { get; set; }
public string Name { get; set; }
public List<UserDto> Users { get; set; }
}
public class UserDto
{
public int Id { get; set; }
public string Email { get; set; }
public List<CallPointDto> CallPoints { get; set; }
}
所以基本上我有很多对很多的映射,但是它们之间确实有一个实体,基本上充当查找表。 我该如何映射? 我目前只是像下面这样循环和映射,但是它太慢了
private List<CallPointDto> MapCallPoint(List<CallPoint> callPoints)
{
List<CallPointDto> callPointDtos = new List<CallPointDto>();
foreach (var callPoint in callPoints)
{
var callPointDto = _mapper.Map<CallPointDto>(callPoint);
callPointDto.Users = new List<UserDto>();
foreach (var item in callPoint.UserCallPoints)
{
UserDto userDto = _mapper.Map<UserDto>(item.User);
callPointDto.Users.Add(userDto);
}
callPointDtos.Add(callPointDto);
}
return callPointDtos;
}
如何使用自定义解析器执行此操作?
由于n:m关系可能会无限运行,因此我无法为您提供所需的答案。 但我建议您像这样使用不同的子DTO:
public class CallPointBaseDto
{
public int Id { get; set; }
public string Name { get; set; }
}
public class CallPointDto : CallPointBaseDto
{
public List<UserBaseDto> Users { get; set; }
}
public class UserBaseDto
{
public int Id { get; set; }
public string Email { get; set; }
}
public class UserDto : UserBaseDto
{
public List<CallPointBaseDto> CallPoints { get; set; }
}
对应:
cfg.CreateMap<CallPoint, CallPointDto>()
.ForMember(dest => dest.Users, opt => opt.MapFrom(src => src.UserCallPoints.Select(ucp => ucp.User)));
cfg.CreateMap<User, UserBaseDto>();
当然,这样做的缺点是,UserBaseDto中没有CallPoints,但是如果需要,可以显式调用此User并以其他方式映射它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.