2012-06-25 14 views
27

मैं निम्नलिखित मॉडल है:AutoMapper का उपयोग करते हुए एक स्ट्रिंग को एक वस्तु की संपत्ति को मैप करने के

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

मैं AutoMapper का उपयोग करने के लिए एक स्ट्रिंग संपत्ति के लिए Tag प्रकार के Name संपत्ति मैप करने के लिए सक्षम होना चाहते हैं मेरे व्यूमोडल्स में से एक।

मैं एक कस्टम समाधानकर्ता बनाया है निम्नलिखित कोड का उपयोग कर, इस मानचित्रण को संभालने के लिए प्रयास करने के लिए:

public class TagToStringResolver : ValueResolver<Tag, string> 
    { 
     protected override string ResolveCore(Tag source) 
     { 
      return source.Name ?? string.Empty; 
     } 
    } 

मैं निम्नलिखित कोड का उपयोग कर मानचित्रण हूँ:

Mapper.CreateMap<Tag, String>() 
    .ForMember(d => d, o => o.ResolveUsing<TagToStringResolver>()); 

जब मैं आवेदन मैं चलाने त्रुटि प्राप्त करें:

Custom configuration for members is only supported for top-level individual members on a type.

मैं क्या गलत कर रहा हूं?

उत्तर

40

है इसका कारण यह है कि आप वास्तविक गंतव्य प्रकार के बजाय गंतव्य प्रकार की संपत्ति के लिए मैप करना चाहते हैं। आप प्राप्त कर सकते हैं क्या आप के साथ हैं:

Mapper.CreateMap<Tag, string>().ConvertUsing(source => source.Name ?? string.Empty); 

हालांकि यह बहुत आसान हो सकता है सिर्फ टैग वर्ग पर ToString ओवरराइड करने के लिए।

+0

धन्यवाद रॉब। टैग टैग पर ToString को ओवरराइड करने के लिए मैं आपके सुझाव के साथ जा रहा हूं। – marcusstarnes

+0

इसके लिए धन्यवाद। नैतिकता से मैं 'ForMember()' का उपयोग कर रहा था जब मुझे 'ConvertUsing() 'का उपयोग करना चाहिए था। –

9

ForMember का अर्थ है कि आप उस सदस्य के लिए मानचित्रण प्रदान कर रहे हैं जहां आप प्रकार के बीच मैपिंग चाहते हैं। इसके बजाय, इस का उपयोग करें:

Mapper.CreateMap<Tag, String>().ConvertUsing<TagToStringConverter>(); 

और कनवर्टर

public class TagToStringConverter : ITypeConverter<Tag, String> 
{ 
    public string Convert(ResolutionContext context) 
    { 
     return (context.SourceValue as Tag).Name ?? string.Empty; 
    } 
} 
+0

इससे मुझे पूरी इकाई को मानचित्र बनाने में मदद मिली। मुझे एक व्यूमोडेल को एक इकाई में मैप करना पड़ा, और यह जाने का रास्ता था, धन्यवाद! – jpgrassi

+0

बहुत अच्छी सुविधा, थैक्स पैट्रिक! –

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