ऑटोमैपर: एक नई वस्तु बनाए बिना संपत्ति मूल्यों को अपडेट करें


260

मैं एक नया बनाने के बिना किसी अन्य ऑब्जेक्ट के गुण मूल्यों को अपडेट करने के लिए ऑटोमैपर का उपयोग कैसे कर सकता हूं?

जवाबों:


456

मौजूदा गंतव्य पर ले जाने वाले अधिभार का उपयोग करें:

Mapper.Map<Source, Destination>(source, destination);

हां, यह गंतव्य वस्तु देता है, लेकिन यह सिर्फ कुछ अन्य अस्पष्ट परिदृश्यों के लिए है। यह एक ही वस्तु है।


28
धन्यवाद, जिमी ... मैं जानबूझकर ऑटोमैपर से दूर रहा क्योंकि मैं अपने कार्यक्रम को प्रभावित करने वाले सीखने की अवस्था से डरता था। मुझे आधिकारिक तौर पर खेद है कि मैं इतनी देर तक दूर रहा ... यह बहुत आसान है जितना मैंने शुरू में सोचा था।
नील टी।

13
ऑटोमेपर को सबसे उपयोगी पुस्तकालयों में से एक होना चाहिए। मैंने भी इसे लंबे समय के लिए टाला, बहुत लंबे समय तक। मैंने आज इसका उपयोग करना शुरू कर दिया है और यह प्रयोग करने में कितना आसान है, इस पर मुझे बहुत आश्चर्य हुआ।
mcottingham 3

4
मेरे लिए काम नहीं। मैं उसी प्रकार का नक्शा बनाने की कोशिश करता हूं, लेकिन यह नई वस्तु है। उपयोगकर्ता u1, u3 = नया उपयोगकर्ता (); u1 = नया उपयोगकर्ता {Id = 1, NickName = "vami"}; उपयोगकर्ता u4 = Mapper.Map (u1, u3); Assert.AreEqual (u1.Id, u3.Id); Assert.AreEqual (u1.NickName, u3.NickName);
Péter

7
FYI करें, मुझे पता चला कि आपको टाइप मापदंडों को निर्दिष्ट करने की आवश्यकता नहीं है। बस, Mapper.Map (स्रोत, गंतव्य) काम करेगा। अच्छा और सरल!
जुडाह गेब्रियल हिमांगो

2
क्या NULL व्यवहार 4.2.1 रिलीज़ में बदल गया है? मैं देख रहा हूँ कि एक वस्तु में नल मानचित्रण नल देता है; जबकि 2.2.1 में, मौजूदा ऑब्जेक्ट में नल को मैप करने से मौजूदा ऑब्जेक्ट वापस आ गया।
पीटर मैकएवॉय

18

इस काम को करने के लिए आपको स्रोत और गंतव्य के प्रकारों के लिए CreateMap करना पड़ता है, यहां तक ​​कि वे एक ही प्रकार के होते हैं। इसका मतलब है कि यदि आप चाहते हैं कि आपको Mapper.Map<User, User>(user1, user2); इस तरह का नक्शा बनाने की आवश्यकता है Mapper.Create<User, User>()


1
हा! मैंने बस वही पाया है और स्वीकृत उत्तर के लिए एक टिप्पणी जोड़ी है। IMHO आपके स्पष्टीकरण के बिना स्वीकृत उत्तर पूर्ण नहीं है, लेकिन मेरी टिप्पणी के बाद यह हो सकता है, आखिरकार :)
आंद्रेजेज मार्टिना

यह एक महान जोड़ है। हालांकि, मूल प्रश्न में स्रोत और गंतव्य के प्रकारों का उल्लेख नहीं किया गया था, और उन्हें इस प्रकार की आवश्यकता नहीं थी।
jpaugh

4

यदि आप स्वीकार किए गए उत्तर में उपयोग किए गए स्थिर विधि के बजाय IMapper की आवृत्ति विधि का उपयोग करना चाहते हैं, तो आप निम्न (परीक्षण किए गए AutoMapper 6.2.2) कर सकते हैं

IMapper _mapper;
var config = new MapperConfiguration(cfg =>
{
    cfg.CreateMap<Source, Destination>();
});
_mapper = config.CreateMapper();

Source src = new Source
{
//initialize properties
}

Destination dest = new dest
{
//initialize properties
}
_mapper.Map(src, dest);

destअब srcइसे साझा किए गए सभी संपत्ति मूल्यों के साथ अपडेट किया जाएगा । इसके अनूठे गुणों के मूल्य समान रहेंगे।

यहाँ प्रासंगिक स्रोत कोड है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.