2011-05-31 7 views
36

यह एक बेवकूफ सवाल हो सकता है! (ऑटोमैपर और समय-शॉर्ट के लिए n00b!)क्या मुझे दोनों तरीकों से automapper createmap बनाने की आवश्यकता है?

मैं ईएफ 4 इकाइयों से व्यू मॉडेल कक्षाओं में मानचित्र करने के लिए ऑटोमैपर का उपयोग करना चाहता हूं।

1) अगर मैं फोन

CreateMap<ModelClass, ViewModelClass>() 

तो मैं भी

CreateMap<ViewModelClass, ModelClass>() 

रिवर्स प्रदर्शन करने के लिए कॉल करने के लिए की जरूरत है?

2) यदि दो वर्गों में समान संपत्ति नाम हैं, तो क्या मुझे बिल्कुल CreateMap कथन की आवश्यकता है, या यह सिर्फ "विशिष्ट/कस्टम" मैपिंग के लिए है?

+5

'CreateMap () का उपयोग करें। सभी ग्रीन ट्रिमिंग के साथ ReverseMap() 'आपको कुछ कीस्ट्रोक बचाएगा - http://stackoverflow.com/questions/13490456/automapper-bidirectional-mapping-with-reversemap-and देखें -फॉर्मम्बर – drzaus

उत्तर

12

ऑटोमैपर में आपके पास स्रोत प्रकार और गंतव्य प्रकार है। तो आप इस स्रोत प्रकार और गंतव्य प्रकार के बीच केवल तभी मैप करने में सक्षम होंगे यदि आपके पास कोई संबंधित CreateMap है। तो आपके सवालों के जवाब:

  1. आप की जरूरत नहीं है रिवर्स मानचित्रण परिभाषित करने के लिए। आपको केवल तभी करना होगा यदि आप वापस नक्शा करना चाहते हैं।
  2. हां, आपको यह इंगित करने के लिए CreateMap को कॉल करने की आवश्यकता है कि उन प्रकारों को मैप करने योग्य है अन्यथा जब आप Map<TSource, TDest> पर कॉल करते हैं तो एक अपवाद फेंक दिया जाएगा कि स्रोत और गंतव्य प्रकार के बीच मैपिंग मौजूद नहीं है।
+0

मुझे पता है कि यह प्रश्न पूछने की जगह नहीं है। आम तौर पर मैं डीटीओ के साथ एक इकाई वस्तु शुरू करने के लिए ऑटोमैपर का उपयोग कर रहा हूं और डीटीओ क्लाइंट एप्लिकेशन में उपयोग करने वाला एकमात्र मॉडल है। मेरा सवाल डेटाबेस से पढ़ने के बारे में है, उस समय मेरे पास एंटिटी मॉडल का संग्रह है जिसे डीटीओ मॉडल शुरू करना चाहिए। क्या मुझे एक और रिवर्स मैपिंग बनाने की ज़रूरत है? – saber

+0

@ सैबर हां। मेरा मतलब है कि मैं वही कर रहा हूं जब तक कोई और रिवर्स का सबूत नहीं देता। –

+0

प्रश्न अभी भी बनी हुई है, हमें 'CreateMap' क्यों कॉल करना है? मुझे मैपिंग मैन्युअल रूप से नामित करने के लिए मजबूर करना चीजों के पूरे "ऑटो" हिस्से के लिए सच नहीं है ... – Slight

8

मैं एक विस्तार पद्धति का उपयोग किया दोनों तरीकों से मानचित्रण करते

public static IMappingExpression<TDestination, TSource> BothWays<TSource, TDestination> 
     (this IMappingExpression<TSource, TDestination> mappingExpression) 
    { 
     return Mapper.CreateMap<TDestination, TSource>(); 
    } 

उपयोग:

CreateMap<Source, Dest>().BothWays(); 
+3

मुझे लगता है कि यह एक्सटेंशन पहले से ही 'ReverseMap()' यानी 'CreateMap () के रूप में मौजूद है। ReverseMap() 'जैसा देखा गया है [यहां] (http://stackoverflow.com/a/18490071/1037948) ... और जैसा कि मैंने अभी देखा [नीचे दिए गए जवाब] (http://stackoverflow.com/a/11673804/1037948) – drzaus

+0

मुझे लगता है रिवर्समैप को फरवरी 2012 के बाद जोड़ा गया था। – Brian

+0

शायद, मैं बस [प्रतिबद्ध टाइमस्टैम्प] द्वारा जा रहा हूं (https://github.com/AutoMapper/AutoMapper/commit/bff6e2aa49af3e7b50f527376da48924efa7d81e) नवंबर 2011 – drzaus

96

लोग हैं, जो इस सवाल पर आते हैं की जानकारी के लिए। CreateMap() कॉन्फ़िगरेशन श्रृंखला के अंत में .ReverseMap() कॉल जोड़कर रिवर्स मैपिंग प्राप्त करने के लिए अब एक अंतर्निहित तरीका प्रतीत होता है।

+3

स्पष्ट रूप से इसमें शामिल किया गया था [कुछ महीने पहले जवाब के बाद] (https://github.com/AutoMapper/AutoMapper/commit/bff6e2aa49af3e7b50f527376da48924efa7d81e) – drzaus

+0

यहां उदाहरण है https://dotnetfiddle.net/0x8csL – Sergey

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