Automapper映射时Ignore配置不生效,未映射属性被置空如何解决
问题原因
你使用的是AutoMapper的_mapper.Map<UserModel>(item)重载,该重载的逻辑是全新创建一个UserModel实例,将源对象属性映射到新实例后返回。你的代码中将新实例直接赋值给了existing变量,直接丢弃了从数据库查询得到的原有实例,原有实例的UserId、Alias属性自然无法保留,该问题和你配置的Ignore规则无关。
解决方法
使用AutoMapper支持「映射到现有目标对象」的重载_mapper.Map<TSource, TDestination>(TSource source, TDestination destination)即可,该重载会直接修改传入的现有目标实例,仅更新配置了映射关系的属性,标记为Ignore的属性会保留原有值,你现有的映射Profile配置无需修改。
修改后的业务代码如下:
private void FindUpdatedUsers(IEnumerable<UserModel> existingUsers, IEnumerable<ADModel> adUsers) { foreach (var item in adUsers) { var existing = existingUsers.First(e => string.Equals(e.Surname, item.Surname, StringComparison.InvariantCultureIgnoreCase)); // 直接将ADModel属性映射到已有的existing实例,不需要重新赋值 _mapper.Map(item, existing); _userService.Update(existing); } }
内容的提问来源于stack exchange,提问作者Jiggs
相关产品推荐
相关产品推荐

