2011-01-19 10 views
13

मैं ऑटोमैपर दस्तावेज़ों के माध्यम से इस पर एक अनुशंसित समाधान खोजने और खोजने के लिए जा रहा हूं लेकिन इसे खोजने में सक्षम नहीं हूं।संग्रह सामग्री में किसी संपत्ति को मानचित्र करें

चलो कहते हैं कि मैं निम्नलिखित

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

इस वर्ग के ग्राहक से आबादी वाले हो जाता है और निम्नलिखित डोमेन वस्तु वर्ग

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

जहां नोट

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

    // other properties excluded for brevity 
} 
है को मैप किया जाता है की तरह एक वर्ग करते हैं

मैंपर Note स्ट्रिंग प्रॉपर्टी को मैप करना चाहता हूं, सबसे पहले Text संपत्ति Note के नए उदाहरण पर संपत्ति और NotesBar पर संग्रह जोड़ें। मैं इस ऑपरेशन के पहले भाग को करने के लिए ValueResolver का उपयोग कर रहा हूं (स्ट्रिंग को Note के नए उदाहरण में मैप करना) लेकिन मुझे यकीन नहीं है कि दूसरे भाग के बारे में कैसे जाना है (उस आइटम को संग्रह में किसी आइटम पर मैप करना)।

ऐसा करने का सबसे साफ तरीका क्या है?

उत्तर

39

मैं इस तरह काम करना चाहिए कुछ सोच रहा हूँ (परीक्षण नहीं - बस ज़ोर से टाइपिंग):

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

संपादित

तुम भी AutoMappers AfterMap कार्यक्षमता का उपयोग कर सकते हैं। Autamapper ने नियमित मैपिंग करने के बाद यह लैम्ब्डा निष्पादित किया जाएगा:

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

बार डेटा स्रोत से पॉप्युलेट एक डोमेन ऑब्जेक्ट है। मुझे लगता है कि यह एक नए डोमेन ऑब्जेक्ट इंस्टेंस में मैपिंग का ख्याल रखेगा, लेकिन क्या यह उस मामले को संभालेगा जहां डोमेन ऑब्जेक्ट डेटासोर्स से पॉप्युलेट किया गया है और संग्रह में आइटम पहले से ही हो सकता है और मैं उस संग्रह में कोई आइटम जोड़ना चाहता हूं? –

+0

AfterMap का उपयोग करने के लिए एक विकल्प के साथ मेरा जवाब संपादित किया। वैकल्पिक रूप से, यदि चीजें बहुत मुश्किल हो जाती हैं तो आप एक कस्टम प्रकार कनवर्टर का उपयोग कर सकते हैं: http://automapper.codeplex.com/wikipage?title=Custom%20Type%20Converters – PatrickSteele

+2

MapAfter ने एक इलाज किया, मुझे सही दिशा में इंगित करने के लिए बहुत धन्यवाद :) –

संबंधित मुद्दे