2011-05-13 13 views
10

के साथ मानचित्रण शब्दकोशों को इन कक्षाओं को देखते हुए, मैं उनमें से एक शब्दकोश को कैसे मैप कर सकता हूं?ऑटोमैपर

public class TestClass 
{ 
    public string Name { get; set; } 
} 

public class TestClassDto 
{ 
    public string Name { get; set; } 
} 


Mapper.CreateMap<TestClass, TestClassDto>(); 
Mapper.CreateMap<Dictionary<string, TestClass>, 
        Dictionary<string, TestClassDto>>(); 

var testDict = new Dictionary<string, TestClass>(); 
var testValue = new TestClass() {Name = "value1"}; 
testDict.Add("key1", testValue); 

var mappedValue = Mapper.Map<TestClass, TestClassDto>(testValue); 

var mappedDict = Mapper.Map<Dictionary<string, TestClass>, 
          Dictionary<string, TestClassDto>>(testDict); 

उनमें से एक मानचित्रण, मैप्ड इस मामले में वैल्यू ठीक काम करता है।

उनमें से एक शब्दकोश मैपिंग गंतव्य ऑब्जेक्ट में कोई प्रविष्टि नहीं समाप्त होता है।

मैं क्या कर रहा हूं?

उत्तर

13

आपके पास जो समस्या है, वह है क्योंकि ऑटोमैपर सामग्री शब्दकोश को मैप करने के लिए संघर्ष कर रहा है। आपको यह सोचना होगा कि यह एक स्टोर है - इस मामले में KeyValuePairs

यदि आप KeyValuePair संयोजन के लिए मैपर बनाने का प्रयास करते हैं तो आप जल्दी से काम करेंगे कि आप के रूप में सीधे नहीं जा सकते हैं मुख्य प्रॉपर्टी में कोई सेटटर नहीं है।

ऑटोमैपर इस के आसपास हो जाता है हालांकि आपको कन्स्ट्रक्टर का उपयोग करके मानचित्र पर जाने की इजाजत मिलती है।

/* Create the map for the base object - be explicit for good readability */ 
Mapper.CreateMap<TestClass, TestClassDto>() 
     .ForMember(x => x.Name, o => o.MapFrom(y => y.Name)); 

/* Create the map using construct using rather than ForMember */ 
Mapper.CreateMap<KeyValuePair<string, TestClass>, KeyValuePair<string, TestClassDto>>() 
     .ConstructUsing(x => new KeyValuePair<string, TestClassDto>(x.Key, 
                    x.Value.MapTo<TestClassDto>())); 

var testDict = new Dictionary<string, TestClass>(); 
var testValue = new TestClass() 
{ 
    Name = "value1" 
}; 
testDict.Add("key1", testValue); 

/* Mapped Dict will have your new KeyValuePair in there */ 
var mappedDict = Mapper.Map<Dictionary<string, TestClass>, 
Dictionary<string, TestClassDto>>(testDict); 
+0

ध्यान दें कि दूसरा ConstructUsing बिट अपनी बात करने के लिए पहले मानचित्र का उपयोग करता है। –

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