2017-01-31 2 views
0

以下のクラスが定義されています。Automapperはマッピングされていません。IEnumerable <T> to IEnumerable <T> in Viewmodel

Data.Models.Lists.List 

Infrastructure.Models.Lists.List 

両方に次のフィールドがあります。

public int Id { get; set; } 

public string Description { get; set; } 

このビューモデルも定義されています。私Automapper構成の中で、私は単純に次のように

public class IndexViewModel 
{ 
    public IEnumerable<Infrastructure.Models.Lists.List> Lists { get; set; } 
} 

をしています。

cfg.CreateMap< Data.Models.Lists.List, Infrastructure.Models.Lists.List>() 

私はこれで十分だろうと思っていましたが、これも追加しました。

cfg.CreateMap<IEnumerable<List>,Models.Lists.IndexViewModel>(); 

ただし、コントローラ内のアイテムをマップしようとすると、

var items = ListsService.GetLists(CurrentPrincipal.Id); 

var model = Mapper.Map<IndexViewModel>(items); 

model.Listsは常にnullですが、項目は22です。このマッピングを機能させるには、他に何を追加する必要がありますか?

答えて

1

AutoMapperは、同じ名前の2つのタイプのプロパティの自動マッピングを行います。あなたの場合のようにターゲットオブジェクトのプロパティへの全ソースオブジェクトをマッピングするために

、あなたはそれを明示的に指定する必要があります:あなたはそれを指摘するとき

私が見
cfg.CreateMap<IEnumerable<Data.Models.Lists.List>, Models.Lists.IndexViewModel>() 
    .ForMember(dest => dest.Lists, m => m.MapFrom(src => src)); 
+0

私はそれが私が探していると思います。朝までこれをテストすることはできませんが、チケットを見てください – ChrisBint

+0

完全に働いた。ありがとう – ChrisBint

0

あなたのアイテムは、Listsプロパティではなく、直接viewmodelのインスタンスにマッピングしています。最初のマッピング設定は問題ありません。もう1つは必要ありません。

+0

、理にかなっています!私は本当にすべてのマッピングロジックを1つの場所に保持したいと思っていました。上のコードがコントローラにあるように見えます。私はマッピングからこれを行う方法があると仮定します。午前中にさらに見えるだろう。ありがとう – ChrisBint

関連する問題