2011-07-21 11 views
6

मुझे ऑटोमैपर के साथ एक विशेष मैपिंग के साथ सहायता चाहिए। मैं तारों के संग्रह में ऑब्जेक्ट्स का संग्रह मैप करना चाहता हूं।ऑटोमैपर: तारों के संग्रह में ऑब्जेक्ट का संग्रह मैपिंग

तो मैं एक टैग

public class Tag 
{ 
    public Guid Id { get; set; } 
    public string Name {get; set; } 
} 

classd एक मॉडल मैं इस वर्ग का एक IList है की तुलना में है। अब मैं नामों को तारों के संग्रह में मैप करना चाहता हूं।

Thats मैं मानचित्रण नियम कैसे परिभाषित:

.ForMember(dest => dest.Tags, opt => opt.ResolveUsing<TagNameResolver>()) 

और यहाँ मेरी ValueResolver है:

protected override string ResolveCore(Tag source) 
{ 
    return source.Name; 
} 

लेकिन यू पता है .. यह काम न ;-) तो शायद किसी को पता है कि कैसे करना है यह सही है और मेरी मदद कर सकता है।

बहुत THX

जनवरी

Sooo .. यू अधिक जानकारी के लिए चाहते थे .. यहाँ यू इसे पाने .. लेकिन मैं इसे छोटा है;)

तो मॉडल:

public class Artocle 
{ 
    public Guid Id { get; set; } 
    public string Title {get; set; } 
    public string Text { get; set; } 
    public IList<Tag> Tags { get; set; } 
} 

और टैग मॉडल आप ऊपर देख सकते हैं।

मैं इसे एक लेख दृश्य में मैप करना चाहता हूं ... मुझे केवल कुछ व्यावसायिक संदर्भों के लिए टैग मॉडल की आवश्यकता है, न कि आउटपुट के लिए।

public class ArticleView 
{ 
    public Guid Id { get; set; } 
    public string Title { get; set; } 
    public string Text { get; set; } 
    public IList<string> Tags { get; set; } // The mapping problem :-) 
} 

तो मैं मैपिंग के लिए एक bootstrapper है:

तो यहाँ ViewModel मैं करने के लिए मैप करने की आवश्यकता है। मेरे मानचित्रण इस तरह दिखता है:

Mapper.CreateMap<Article, ArticleView>() 
.ForMember(dest => dest.Tags, opt => opt.ResolveUsing<TagNameResolver>()) 

और मैं यह manuelly नक्शा एक विशेष विधि

public static ArticleView ConvertToArticleView(this Article article) 
    { 
     return Mapper.Map<Article, ArticleView>(article); 
    } 
+0

क्या आप स्रोत और गंतव्य कक्षाओं के बारे में अधिक जानकारी प्रदान कर सकते हैं? –

+0

तो मैं बस इतना करता हूं :) मुझे उम्मीद है कि मेरा संस्करण मदद कर सकता है :) – Smokefoot

उत्तर

13

के साथ एक इकाई परीक्षण मान्य IList <Tag> से IList को <string>

private class TagNameResolver : ValueResolver<IList<Tag>, IList<string>> 
     { 
      protected override IList<string> ResolveCore(IList<Tag> source) 
      { 
       var tags = new List<string>(); 
       foreach (var tag in source) 
       { 
        tags.Add(tag.Name); 
       } 
       return tags; 
      } 
     } 

नक्शा हैं निम्नलिखित यह नक्शा बनाने का एक छोटा रास्ता है:

.ForMember(dest => dest.Tags, opt => opt.MapFrom(so => so.Tags.Select(t=>t.Name).ToList())); 
+1

अरे .. यह इतना आसान है ^^ आपको इस तरह से बहुत ज्यादा धन्यवाद: डी * शर्म * – Smokefoot

+0

आपका स्वागत है। मैंने भी एक छोटा विकल्प जोड़ा। –

+1

ओह आपका दूसरा विकल्प बहुत अच्छा है। बहुत बहुत धन्यवाद – Smokefoot

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