2012-05-18 13 views
5

EDIT:タイトルが正しくありません。ソースリストからネストされたモデルのソースリストにマップしようとしています。ソースネストされたコレクションから別のコレクションへのAutoMapperマップ

リストをネストされたモデルにリストされた別のマップにマップしようとしています。種類の種類と平らではない。問題は、マッピングを行う方法がわからないことです。

...

項目とItemModelがすでに定義された私は、このようにそれを行うことはできません

それらの間のマッピングを持っている
public class DestinationModel 
{ 
    public DestinationNestedViewModel sestinationNestedViewModel { get; set; } 
} 

public class DestinationNestedViewModel 
{ 
    public List<ItemModel> NestedList { get; set; } 
} 

public class SourceModel 
{ 
    public List<Item> SourceList { get; set; } 
} 

:ここ

は私のセットアップは、マッピングで私の失敗を踏襲しています

Mapper.CreateMap<SourceModel, DestinationModel>() 
.ForMember(d => d.DestinationNestedViewModel.NestedList, 
    opt => opt.MapFrom(src => src.SourceList)) 

ERROR:

式D」=> d.DestinationNestedViewMode l.NestedListは」トップレベルmember.Parameter名に解決する必要があります。 NestedList = t.SourceListがある

.ForMember(d => d.DestinationNestedViewModel, 
o => o.MapFrom(t => new DestinationNestedViewModel { NestedList = t.SourceList })) 

問題:lambdaExpression

私は、このような何かを試してみました。 それぞれには、それぞれ異なる要素、、アイテムモデル、アイテムが含まれています。したがって、それらをマッピングする必要があります。

どのようにマップすればよいですか?

+0

ItemからItemModelへのマッピングを作成する必要があると思いますので、AutoMapperはItemオブジェクトをItemModelオブジェクトにマップする方法を知っています。 –

+0

ItemとItemModelの間に既にマッピングが定義されていますが、NestedListがDestinationModel に属し、NestedListがDestinationNestedViewModelに属しているため、マッピングがトリガーされていません。 Automapperは、マッピングする際に少なくとも2つのモデルのモデルを扱うことができません。(少なくとも私が試したやり方ではありません) – getit

答えて

11

私はあなたがこのような何かをしたいと思う:

Mapper.CreateMap<Item, ItemModel>(); 

/* Create a mapping from Source to Destination, but map the nested property from 
    the source itself */ 
Mapper.CreateMap<SourceModel, DestinationModel>() 
    .ForMember(dest => dest.DestinationNestedViewModel, opt => opt.MapFrom(src => src)); 

/* Then also create a mapping from Source to DestinationNestedViewModel: */ 
Mapper.CreateMap<SourceModel, DestinationNestedViewModel>() 
    .ForMember(dest => dest.NestedList, opt => opt.MapFrom(src => src.SourceList)); 

次に、あなたがしなければならない必要があるすべてはSourceDestination間の通話Mapper.Mapです:私はそれを正しく理解すればわからない

Mapper.Map<SourceModel, DestinationModel>(source); 
+0

最初に両方のオブジェクトのコレクションをマップします。これらのコレクション内の個々のオブジェクトのマッピングを定義します。 – hanzolo

関連する問題