automapper - Automapper 忽略反向地图上的目的地属性
问题描述
我正在尝试将具有一些重叠属性的 2 个模型映射在一起:
public class UserModel
{
public int UserId { get; set; }
public string Forename { get; set; }
public string Surname { get; set; }
public string Alias { get; set; }
}
public class ADModel
{
public string GivenName { get; set; }
public string Surname { get; set; }
}
我从数据库中检索 UserModel 并希望映射 ADModel 以获取对记录的任何更新。我只对更新 ADModel 上的 UserModel 属性感兴趣。我已经设置了一个映射配置文件,如下所示:
public UserProfile()
{
CreateMap<ADModel, UserModel>()
.ForMember(dest => dest.Forename, opt => opt.MapFrom(src => src.GivenName))
.ForMember(dest => dest.Surname, opt => opt.MapFrom(src => src.Surname))
.ForMember(dest => dest.Alias, opt => opt.Ignore())
.ForMember(dest => dest.UserId, opt => opt.Ignore());
}
但是,它似乎永远不会忽略 Alias 或 UserId 属性并将它们设置为 null。我想保持这些属性不变并覆盖名字和姓氏,是否保持未映射的属性相同?
我在这里尝试过(但我不使用构造函数)和这里但都不适合我。我也浏览过这篇文章并尝试了该UseDestinationValue()
选项,但这仍然会导致别名为 null。
调用方法,如果有帮助:
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));
existing = _mapper.Map<UserModel>(item);
_userService.Update(existing);
}
}
解决方案
当您寻求帮助时,灵感总是会来袭!
对于那些需要类似帮助的人,我使用了错误的 Map 方法。
_mapper.Map<UserModel>(item)
当我想要将on 映射到现有记录时,会将 on映射item
到新鲜的、清晰的。UserModel
ADModel
UserModel
交换这个要求,_mapper.Map(ADModel, UserModel)
将新项目映射到我现有的项目上,每个人都是赢家。
推荐阅读
- process - 创建进程或线程哪个更快?为什么?
- python - Python - 拆分列表以获取最小值和最大值
- python - 运行软件源导致 Python 错误 (LMDE 3)
- c# - 扩展 Windows 10 中音量变化的音量控制(类似于 Windows 上的 Spotify)
- node.js - 两个不同密码的 .env 环境
- spring-boot - Spring 和 Kafka:对 Kafka Producer 和 Kafka Streams 使用相同的绑定
- flutter - 如何在颤动中更改我的平面按钮的位置......(从最左边到最右边)
- java - 查找与用户输入匹配的数组中的第一个元素并在 2 个二维数组之间打印该位置
- javascript - 如何使用模态对话框库将用户输入存储为变量?(JavaScript)
- c++ - (char*)&obj 替代品