Is there any way to use IMapper.Map like this:
IMapper mapper = new Mapper(config);
MemberDTO dto = mapper.Map<Member, MemberDTO>(member, config, m => m.Membership); // this is not supported
which works similarly to ProjectTo
?:
Member dto = db.Members.Where(m => m.Id = id).ProjectTo<MemberDTO>(config, m => m.Membership).FirstOrDefault();
The problem is that in my ASP.NET MVC app, I need to update an entity then return its DTO
public MemberDTO Update(int id)
{
// First get the member Id in database
Member member = _db.Members.FirstOrDefault(m => m.Id == id);
// Do many many update stuffs
....
_db.SaveChanges();
// Map to DTO
MemberDTO dto = _mapper.Map<Member, MemberDTO>(member);
return dto;
}
I use EF lazy loading and IMapper.Map
returns unneccessary navigation properties and results in a reference loop. I want to use specify what navigation to map inside this, as specified in the mapping config:
CreateMap<Membero, MemberDTO>()
.ForMember(x => x.Membership, opt => opt.ExplicitExpansion())
.....
What I tried:
- Using
ProjectTo()
but I think that I should not have another trip to the database here. I really dont want all my entity Update function to behave like that
- Detach the object from context, but then all my navigation properties are not mapped
Thanks in advance!
question from:
https://stackoverflow.com/questions/65883742/automapper-how-to-use-explicit-expansion-inside-imapper-map 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…