如何忽略目标中缺少的属性? 现在我的代码是
public class UISource
{
public string Field1 { get; set; }
public string Field2 { get; set; }
}
public class DBTarget
{
public string Field1 { get; set; }
public string Field2 { get; set; }
public string Field3 { get; set; }
public string Field4 { get; set; }
}
public static class Helper
{
public static D Map<S, D>(S uiSource) where D : class, new()
{
MapperConfiguration config = new MapperConfiguration(cfg =>
{
cfg.CreateMap<S, D>();
});
IMapper mapper = config.CreateMapper();
D destination = mapper.Map<S, D>(uiSource);
return destination;
}
}
private void SomeMethod()
{
UISource uiSource = new UISource();
uiSource.Field1 = "NewValue1";
uiSource.Field2 = "NewValue2";
DBTarget dbTarget = new DBTarget();
dbTarget.Field1 = "OldValue1";
dbTarget.Field2 = "OldValue2";
dbTarget.Field3 = "SomeOtherValue";
dbTarget.Field4 = "SomeOtherValue";
dbTarget = Helper.Map<UISource, DBTarget>(uiSource);
}
此代码使dbTarget.Field3和dbTarget.Field4为null。我正在使用Automapper 4.2.1。 我已经尝试了This,但它在最新版本中无效...
答案 0 :(得分:0)
Map方法已重载,因此您可以提供目标和源。重构辅助类以接受D目标,如下所示:
public static D Map<S, D>(S uiSource, D dbTarget) where D : class, new()
{
MapperConfiguration config = new MapperConfiguration(
cfg =>
{ cfg.CreateMap<S, D>(); });
IMapper mapper = config.CreateMapper();
D destination = mapper.Map<S, D>(uiSource, dbTarget);
return destination;
}
然后你可以这样调用帮助器:
dbTarget = Helper.Map<UISource, DBTarget>(uiSource, dbTarget);
Field3和Field4值在映射后保持不变!