如果目标上的条件为真,则有条件地忽略源中的字段

时间:2015-10-22 13:07:01

标签: automapper

我正在使用Automapper来更新DTO中的一系列实体。但是,如果某些条件适用,有些属性我不想从DTO更新。例如,实体过去有一个日期。

1 个答案:

答案 0 :(得分:3)

使用PreCondition选项。这是一个简单的例子:

public class Source
{
    public string Name { get; set; }
    public int Age { get; set; }
}

public class Dest
{
    public string Name { get; set; }
    public int Age { get; set; }
    public DateTime LastUpdated { get; set; }
}

Name的映射仅在LastUpdated的当前年份为2015年时才会发生:

Mapper.CreateMap<Source, Dest>()
    .ForMember(d => d.Name, o => o.PreCondition((rc) => ((Dest) rc.DestinationValue).LastUpdated.Year == 2015))
    .ForMember(d => d.LastUpdated, o => o.Ignore());

Mapper.AssertConfigurationIsValid();

在下面的代码中,“dest”对象将保留名称“Larry”:

var src = new Source {Name = "Bob", Age = 22};
var dest = new Dest {Name = "Larry", LastUpdated = new DateTime(2014, 10, 11)};

Mapper.Map<Source, Dest>(src, dest);

如果您将LastUpdated的年份更改为2015,则Name属性会更新为“Bob”。