首页 > 解决方案 > 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);
        }
    }

标签: automapper

解决方案


当您寻求帮助时,灵感总是会来袭!

对于那些需要类似帮助的人,我使用了错误的 Map 方法。

_mapper.Map<UserModel>(item)当我想要将on 映射到现有记录时,会将 on映射item到新鲜的、清晰的。UserModelADModelUserModel

交换这个要求,_mapper.Map(ADModel, UserModel)将新项目映射到我现有的项目上,每个人都是赢家。


推荐阅读