我正在使用Automapper
来更新DTO中的一系列实体。但是,如果某些条件适用,有些属性我不想从DTO更新。例如,实体过去有一个日期。
答案 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”。