2012-12-17 19 views
10

Automapper का उपयोग करते हुए मैं एक साधारण नक्शा बनाने:ऑटोमैपर: क्या नक्शा <A,B><B,A> देता है?

Mapper.CreateMap<MyCustomerDTO, YourCustomerDTO>() 

मैं अक्सर अन्य तरीके से भी जाने की जरूरत है। क्या मुझे दूसरी तरफ मैपिंग बनाने की ज़रूरत है, या ऑटोमैपर उपर्युक्त मैपिंग के आधार पर इसका अनुमान लगाएगा?

Mapper.CreateMap<YourCustomerDTO, MyCustomerDTO>() //Needed? 

उत्तर

11

नहीं। आपको दो तरह के मैपिंग बनाना होगा। दो तरह से मानचित्रण के लिए एक अच्छा सहायक विधि हो सकता है:

protected virtual void ViceVersa<T1, T2>() 
     { 
      Mapper.CreateMap<T1, T2>(); 
      Mapper.CreateMap<T2, T1>(); 
     } 

तो इस तरह इसका इस्तेमाल:

ViceVersa<T1, T2>(); 
+15

ध्यान दें कि अब यह 'रिवर्स मैप' विकल्प के साथ "बॉक्स से बाहर" किया जा सकता है। – Mightymuke

2

आपको दूसरी मैपिंग भी बनाने की आवश्यकता है। एक साधारण दूसरी मानचित्रण के बिना अपने अनुप्रयोग चलाने के लिए कोशिश कर रहा है परीक्षण आप एक रनटाइम त्रुटि

+0

मुझे नहीं लगता कि यह एक संकलन त्रुटि देता है अगर मुझे सही याद है ... यह रनटाइम त्रुटि देता है? बी के लिए कोई मैपिंग नहीं, उन पंक्तियों के साथ पाया या कुछ? – Alex

+0

यह सही है ... मुझे याद आया कि यह किसी प्रकार की त्रुटि देता है। – Dmitry

15

यह करने के लिए Do i need to create automapper createmap both ways?

नोट .ReverseMap()here के बारे में जवाब डुप्लिकेट है दे देंगे।

ध्यान दें कि .ReverseMap() मूल मैपिंग के लिए है। यदि आपको विकल्पों का उपयोग करने की आवश्यकता है (जैसे विशिष्ट ForMember मैपिंग), तो आपको कस्टम रिवर्स मैप बनाना होगा।

1

मैं एक ही मुद्दे का सामना करना पड़ा जब AutoMapper साथ काम करना, और @ बेहनाम-esmaili है एक अच्छा जवाब लेकिन यह सुधार किया जा सकता है।

आप IMapperConfigurationExpression के लिए एक विस्तार विधि है जो इस दोतरफा मानचित्रण करना होगा और यह भी दो वैकल्पिक पैरामीटर (Action<IMappingExpression<T, Y>>) जो जब दोनों प्रकार के मैपिंग कॉन्फ़िगर करने का प्रयास किया जाएगा उम्मीद कर को लागू कर सकते हैं।

public static class ModelMapper 
{ 
    private static readonly IMapper _mapper; 

    static ModelMapper() 
    { 
     var mapperConfiguration = new MapperConfiguration(config => 
     { 
      config.CreateTwoWayMap<CustomerViewModel, Customer>(
       secondExpression: (exp) => exp.ForMember((source) => source.CustomerEmail, opt => opt.MapFrom(src => src.Email))); 
     }); 

     _mapper = mapperConfiguration.CreateMapper(); 
    } 

    public static void CreateTwoWayMap<T, Y>(this IMapperConfigurationExpression config, 
     Action<IMappingExpression<T, Y>> firstExpression = null, 
     Action<IMappingExpression<Y, T>> secondExpression = null) 
    { 
     var mapT = config.CreateMap<T, Y>(); 
     var mapY = config.CreateMap<Y, T>(); 

     firstExpression?.Invoke(mapT); 
     secondExpression?.Invoke(mapY); 
    } 

    public static T Map<T>(object model) 
    { 
     return _mapper.Map<T>(model); 
    } 
} 

उपरोक्त कार्यान्वयन इसे प्राप्त करने का एक तरीका है, हालांकि इसे अलग-अलग डिज़ाइन किया जा सकता है।

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

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