自动映射:忽略目标中缺少的属性

时间:2016-05-14 04:25:49

标签: c# automapper

如何忽略目标中缺少的属性? 现在我的代码是

 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,但它在最新版本中无效...

1 个答案:

答案 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值在映射后保持不变!