2016-05-14 5 views
1

宛先に不足しているプロパティを無視するにはどうすればよいですか? 今、私のコードは、このコードはdbTarget.Field3とdbTarget.Field4ヌルになり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); 
    } 

です。私はAutomapper 4.2.1を使用しています。 私はThisを試しましたが、最新のバージョンでは動作しません。

答えて

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); 

フィールド3及びフィールド4の値をマッピングした後に保持されます!

関連する問題