如何在 Automapper 映射中保留源 属性 的原始值?

How to keep original value of a source property in Automapper mapping?

输入视图模型:

public class FacilityInputModel 
{
    public int Id { get; set; }
    public string Name { get; set; }
}

领域模型:

public class FacilityInputModel 
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string OriginalName { get; set; }
}

我允许用户更改设施名称但仍保留其原始名称。

说设施是(我写json只是为了方便)

{id:1, name='Facility1', originalName='Facility1'}

创建时。

我要通过发布 FacilityInputModel 来更改名称。

{id:1, name='Facility2'}

在 C# 代码中更新实体:

var entity = _repository.Find(id);
_repository.Detach(entity);
entity = Mapper.Map<Facility>(model);

_repository.Update(entity);
_repository.Save();

我之前得到的entityMapper.Map

{id:1, name='Facility1', originalName='Facility1'}

但是映射之后实体是

{id:1, name='Facility2', originalName=null}

而不是

{id:1, name='Facility2', originalName='Facility1'}

在我的映射中,我尝试 Ignore OriginalName

CreateMap<Facility, FacilityInputModel>()
    .ReverseMap()
    .ForMember(x => x.OriginalName, opt => opt.Ignore());

但它从来没有奏效。也试过

    .ForMember(x => x.NameInWebAdmin, opt => opt.DoNotUseDestinationValue());

还是不行。

所以问题是如何避免现有值在映射中被擦除。并得到映射后实体:

{id:1, name='Facility2', originalName='Facility1'}

当您调用 entity = Mapper.Map<Facility>(model); 时,您将获得一个全新的对象。尝试使用 Mapper.Map<Source, Destination>(source, destination) 映射到现有的。