2012-04-09 9 views
1

をマップするために、私はこのようになりますソースモデルを持っている:どのように複雑なモデルに

public class FooBar { 
    public Foo foo {get;set;} 
    public Bar bar {get;set;| 
} 

public class Foo { 
    // tons of properties 
} 

public class Bar { 
    // tons of irrelevant properties 
    public Baz baz {get;set;} 
} 

その後、私はNewFooBarにFooBarのを平らにし、このようになります先のモデルを持っている:

public class NewFooBar { 
    // all properties from Foo 
    public Baz baz {get;set;} 
} 

どのようにすることができますfooのすべてのプロパティを個別にマップしなくても、FooBarをNewFooBarにマップできますか? (それらの多くがあります)。

私の最初の解決策は、FooとBarを別々にNewFooBarにマップすることでした。次に、マップを個別に実行します。しかし、これはクルージングのようです。可能であれば、私はむしろ単一のマッピングでそれをやりたいと思います。これを行う簡単な方法が欠けていますか?

答えて

1

これは機能しますか?

Mapper.CreateMap<Foo, NewFooBar>() 
      .ForMember(dest => dest.baz, opt => opt.Ignore()) 
      ; 

Mapper.CreateMap<FooBar, NewFooBar>() 
    .ConvertUsing(src => { 
     var newFooBar = AutoMapper.Mapper.Map<Foo, NewFooBar>(src.foo); 

     newFooBar.baz = src.bar.baz; 

     return newFooBar; 
    }); 
    ; 

、その後

var newFooBar = AutoMapper.Mapper.Map<FooBar, NewFooBar>(fooBar); 
+0

まあ、それははるかに良いではありません、そして間違いなく、より複雑な単純に二つのマップを実行するよりも。しかし、それは面白い考えです。 –

+0

CreateMapは1か所で1回実行されます。この考え方は、マップを簡潔に保つことです。このマップは、他のマップと同じように、毎回2つのマップを覚えておく必要はありません。 –

+0

それは良い点です。そして、この場合、あなたが正しいと思います。しかし、別の質問で私が尋ねた別の状況があります。どうぞ見てみましょうか? http://stackoverflow.com/questions/10091653/how-to-introduce-additional-data-into-destination-mapping-without-changing-sourc –

関連する問題