2011-01-19 12 views
13

Przeszukałem dokumentację AutoMapper, aby znaleźć zalecane rozwiązanie tego problemu, ale nie udało mi się go znaleźć.Zamieść właściwość na rzecz kolekcji

Powiedzmy mam klasy jak poniżej

public class Foo 
{ 
    public string Note { get; set; } 
} 

ta klasa dostaje zaludnionych od klienta i zostanie zmapowany do klasy obiektów następujące domeny

public class Bar 
{ 
    public IList<Note> Notes { get; set; } 
} 

gdzie Note jest

public class Note 
{ 
    public string Text { get; set; } 

    // other properties excluded for brevity 
} 

Chciałbym odwzorować właściwość string stringów Note na Foo, najpierw do właściwości Text w nowej instancji Note, a następnie dodaj tę Note do kolekcji Notes pod adresem . Używam ValueResolver do wykonania pierwszej części tej operacji (odwzorowanie łańcucha na nowe wystąpienie Note), ale nie jestem pewien, jak wykonać drugą część (odwzorowanie tego elementu do elementu w kolekcji).

Jaki jest najczystszy sposób na zrobienie tego?

Odpowiedz

39

myślę coś jak to powinno działać (nie testowany - wpisanie się głośno):

Mapper.CreateMap<Foo, Bar>().ForMember(d => d.Notes, 
    opt => opt.MapFrom(s => new List<Note> { new Note { Text = s.Note } }); 

EDIT

Można również użyć AutoMappers AfterMap funkcjonalności. Ta wartość lambda zostanie wykonana po tym, jak Automapper wykonał regularne odwzorowania:

.AfterMap((s,d) => d.Notes.Add(new Note { Text = s.Note })); 
+0

Bar jest obiektem domeny wypełnionym ze źródła danych. Myślę, że zajmie to mapowanie do nowej instancji obiektu domeny, ale zajmie się przypadkiem, w którym obiekt domeny jest wypełniany ze źródła danych i może już zawierać elementy w kolekcji, a ja chciałbym dodać element do tej kolekcji? –

+0

Zmieniono moją odpowiedź z opcją korzystania z Aftermapa. Alternatywnie możesz użyć niestandardowego konwertera, jeśli sprawy staną się zbyt trudne: http://automapper.codeplex.com/wikipage?title=Custom%20Type%20Converters – PatrickSteele

+2

The MapAfter zadziałało, bardzo dziękuję za skierowanie mnie we właściwym kierunku :) –

Powiązane problemy