2011-06-30 5 views
1

を使用するために、私はクラスConfigureAutomapperコレクション・プロパティの内容をマップするが、先のコレクションオブジェクト

class A 
{ 
    public A() 
    { 
    CollectionProp = new List<B>(); 
    } 
    public ICollection<B> CollectionProp {get; private set;} 
} 

を持っている私はからマッピングすることとしましょう - クローニングメカニズムとして> A、が、私はいけませんAutoMapperはCollectionPropを作成しようとすると、(コンストラクタによって作成された)コピー先オブジェクトに存在するCollectionPropを使用するだけで、AからAの新しいインスタンスにすべての 'B'オブジェクトを複製する必要があります。

私はこれを行う..今まで私は持っている:

Mapper.CreateMap<A, A>() 
      .ForMember(dest => dest.CollectionProp, opt => opt.MapFrom(e => e.CollectionProp)); 

新しく作成されたオブジェクトからCollectionPropを使用しているように見えますが、その要素を埋めていないようです。

私には何が欠けていますか?

おかげ

+0

'class'は' class'が最初の 'A'の前に属します。 –

+0

haha​​ ... woops。更新する。 – Adam

+0

私が行う研究が多いほど、AutoMapperはターゲットオブジェクトのCollection(プロパティ)を使用してサポートしていませんが、ソースからマップされたインスタンスを取り込みます... – Adam

答えて

0

は、この1つは私のため

  Mapper.CreateMap<A, A>() 
      .ConvertUsing((s) => { 
       var d = new A(); 
       d.CollectionProp.AddRange(s.CollectionProp); 
       return d; 
      }); 

[OK]を働きました。これは実際にBsをクローンします。

  Mapper.CreateMap<B,B>(); 

      Mapper.CreateMap<A, A>() 
      .ConvertUsing(s => { 
       var d = new A(); 
       s.CollectionProp.ToList() 
        .ForEach(b => d.CollectionProp.Add(Mapper.Map<B,B>(b))); 
       return d; 
      }); 
+0

元のオブジェクトのすべての要素を新しいコレクション? 私は要素も 'クローン'にする必要があります。私の新しいオブジェクトモデルの中にオリジナルと共有するものはありません。 – Adam

+0

私は構文が有効であるとは思っていませんでした... "d => d"、あなたはプロパティを指定していません。 – Adam

+0

クローンの答えが012 – boca

関連する問題