2014-04-01 3 views
1

나는 viewmodels의 IList에 포함 된 뷰 모델이 .Automapper 중첩 viewmodels와 뷰 모델을 매핑

Normaly 내가 좋아하는 일을 할 것입니다 :

IList<Item> items= db.Items.ToList(); 
var viewModel = Mapper.Map<IList<ItemViewModel>>(item); 

어떻게 할 몇 가지 다른 viewmodels를 포함하는 뷰 모델과 함께 그 일? 내가 각 viewmodel의 새로운 인스턴스를 개별적으로 만들려고했지만 모든 사용자 정의보기 모델에 모든 인스턴스를 매핑하는 방법을 보지 못했습니다.

내가 할 수있는 다른 viewmodels에 viewmodels를 매핑 할 수 없습니다?

+0

여러분의 뷰 모델이 동일하다면 수동으로 매핑을 정의 할 필요가 없다면 문제가 없을 것입니다. 시도 –

+0

이 http://stackoverflow.com/questions/13348812/how-to-use-automapper-to-create-complex-viewmodel-objects-from-a-simple-object-a/13355873#13355873 또는 http :/나는 ParentDataObject을 추가 할 때 /stackoverflow.com/questions/20270983/ienumerable-to-entitycollection-failed-mapping-with-automapper-using-nested-mapp/20271546#20271546 –

답변

2

는만큼 당신이보기 모델 유형 모두에 대한지도를 정의로, autoMapper는 중첩 된 뷰 모델을 매핑합니다. I 유형 ChildObjectViewmodel의 속성과 ParentObjectViewModel이있는 경우

예를 들어, 나는 그들 사이에지도를 내장했다 있는지 확인해야합니다 것입니다. Automapper는 귀하의 자산이 IList라는 사실을 처리합니다.

Mapper.CreateMap<ParentObjectViewmodel, ParentDataObject>(); 
    Mapper.CreateMap<ChildObjectViewmodel, ChildDataObject>(); 

물론 뷰 모델 및 데이터 개체의 속성 이름이 일치하지 않으면 Automapper에 지정해야합니다.

편집 : 그냥 자식 개체 (속성)에 매핑 할 수 있도록하려면 같은 귀하의 예를 들어 그것은 소리가 난다. 그래서 당신은 사용한다 :

Mapper.CreateMap<ItemViewModel, Item>(); 

이 있습니다 (해당 개체의 ILists 포함) 항목 유형에 대한 ItemViewModel 유형에서 오토 할 수있다. CreateMap 호출에서 소스 객체 유형은 왼쪽에 있고 대상 유형은 오른쪽에 있습니다. 앞뒤로 매핑하려면 CreateMap을 두 번 호출하십시오.

+0

는이 일을하지만 그것없이 가능한 것입니까? 내 ParentObjectViewModel 내 사용자 지정보기에 필요한 다른 모델의 컬렉션을 자체 비즈니스 환경의 실제 비즈니스 논리를 가지고 있지 않기 때문에 ChildDataObjects를 사용하면 충분하다고 생각했습니다. 내가 이것을 명확히하면 대답을 받아 들일 것입니다. :) –

+0

답변이 업데이트되었습니다. 이게 도움이 되길 바란다. – CuriousLayman

+0

이 답변에 대한 질문이 있습니까? – CuriousLayman