2011-05-09 16 views
6

को देखते हुए निम्नलिखित स्रोतों:Automapper और वर्ग पदानुक्रम

public class SourceBase { public string TheString { get; set; } } 
public class SourceDerived : SourceBase { } 

और गंतव्य:

public class DestBase { public string MyString { get; set; } } 
public class DestDerived : DestBase { } 

और यह मानचित्रण:

CreateMap<SourceBase, DestBase>() 
    .ForMember(dest => dest.MyString, o => o.MapFrom(x => x.TheString)) 
    .Include<SourceDerived, DestDerived>(); 

    CreateMap<SourceDerived, DestDerived>(); 
    Mapper.AssertConfigurationIsValid(); // Exception is thrown here 

हालांकि, इस MyString प्रतिसाद नहीं कह एक मानचित्रण त्रुटि देता है DestDerived पर मैप नहीं किया गया। क्या देता है? क्या मुझे वास्तव में सभी व्युत्पन्न प्रकारों में बेस क्लास गुणों के लिए मैपिंग दोहराने की आवश्यकता है (मेरे पास मेरे वास्तविक कोड में एक से अधिक उप-वर्ग हैं)।

संपादित करें:

सटीक अपवाद DestDerived पर निम्नलिखित 1 गुण मैप नहीं किया जा सकता है: MyString। Destederived पर एक कस्टम मैपिंग अभिव्यक्ति जोड़ें, अनदेखा करें या संपत्ति का नाम बदलें।

+0

सही त्रुटि क्या है? –

उत्तर

0

इस पोस्ट की जाँच करें: http://groups.google.com/group/automapper-users/browse_thread/thread/69ba514a521e9599

यह ठीक काम करता है अगर आप नीचे दिए गए कोड में की तरह यह घोषणा (AutoMapper 1.1.0.188 का उपयोग)। मुझे यकीन नहीं है कि यह आपकी समस्या हल करता है या नहीं।

var result = Mapper.CreateMap<SourceBase, DestBase>() 
       .ForMember(dest => dest.MyString, o => o.MapFrom(x => x.TheString)); 
       //.Include<SourceDerived, DestDerived>(); 
      Mapper.CreateMap<SourceDerived, DestDerived>(); 
      var source = new SourceDerived(); 
      var destDerived = new DestDerived(); 
      source.TheString = "teststring"; 
      var mapResult = Mapper.Map<SourceBase, DestBase>(source, destDerived).MyString; 
      Console.WriteLine(mapResult); 
+0

नहीं यह हमारे लिए काम नहीं करता है। यह वास्तव में भी अजीब है कि यदि आप Mapper.Map (स्रोत, टाइपऑफ (स्रोत डीरिव), टाइपफ़ोफ़ (DestDerived) को कॉल करते हैं तो आपका नमूना कोड विफल हो जाता है। कोई अपवाद नहीं है, लेकिन कोई मैपिंग भी नहीं किया जाता है। – Andy

+0

हम 'Mapper.AssertConfigurationIsValid() 'भी कॉल कर रहे हैं। मुझे लगता है कि आप पाएंगे कि यदि आप अपनी मैपिंग सेट अप करने के ठीक बाद उस कॉल को जोड़ते हैं, तो आपको मेरी पोस्ट में उल्लिखित अपवाद मिलेगा। – Andy

+0

आपकी टिप्पणियों के लिए धन्यवाद। मुझे खेद है कि मैं किसी भी मदद से नहीं हो सकता! –

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