2012-02-01 9 views
3

私はAutoMapperの構文で固まってしまいます。Automapper Mapネストされたクラスのメンバ

ネストされたクラスのマッピングメンバーをスキップする方法(条件文字列は空です)? イムは、次のコードを試してみました:

[TestMethod] 
public void TestMethod4() 
{ 
    var a = new A { Nested = new NestedA { V = 1, S = "A" } }; 
    var b = new B { Nested = new NestedB { V = 2, S = string.Empty } }; 

    Mapper.CreateMap<B, A>(); 
    Mapper.CreateMap<NestedB, NestedA>().ForMember(s => s.S, opt => opt.Condition(src => !string.IsNullOrWhiteSpace(src.S))); 
    var result = Mapper.Map(b, a); 

     Assert.AreEqual(2, result.Nested.V);  // OK 
     Assert.AreEqual("A", result.Nested.S);  // FAIL: S == null 
} 

おかげ

答えて

2

あなたはopt.Skipがhereを提案し使用してみました。

Mapper.CreateMap<NestedB, NestedA>() 
.ForMember(s => s.S, opt => opt.Skip(src => !string.IsNullOrWhiteSpace(src.S))); 

EDIT:ソース内のいくつかの掘削後

。 TypeMapObjectMapperRegistryクラス(ネストされたオブジェクトのマッピングを処理するクラス)では、(UseDestinationValueを使用して)保存先の値を保持する必要があるかどうかを確認する前に戻ります。そうでなければ、私はこれを提案するつもりだった。

Mapper.CreateMap<B, A>(); 
      Mapper.CreateMap<NestedB, NestedA>() 
       .ForMember(s => s.S, opt => opt.Condition(src => !string.IsNullOrWhiteSpace(src.S))) 
       .ForMember(s => s.S, opt => opt.UseDestinationValue()); 

私はジミーがここにコアの問題に対処するためと思われるthisを発見しました。

私が見つけたことから、ConditionとUseDestinationValueを同時に使用する方法はないようです。

+0

私はAutoMapper v2を使用しており、スキップオプションはありません。 – user1183964

関連する問題