繁体   English   中英

如何在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();

我在Mapper.Map之前得到的entity

{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);时,你会得到一个全新的对象entity = Mapper.Map<Facility>(model); 尝试使用Mapper.Map<Source, Destination>(source, destination)映射到现有映射。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM