c# - Nested mapping using automapper for collection of object -


मेरे ऑब्जेक्ट्स स्ट्रक्चर्स

  क्लास क्लास 1 {id, name, list & lt; address & gt; पता} वर्ग cls2 {prop1, prop2, street, housenumber}  

मैं cls1 को cls2 को मानचित्रित करना चाहता हूँ जहां cls2.street को पत्ता ऑब्जेक्ट की सड़क संपत्ति के साथ मानचित्रित करना चाहिए।

जब मैं Mapper.CreateMap & lt; cls1, cls2 & gt; () के लिए कोशिश कर रहा हूँ। ForMember (gn = & gt; g.n.streat, item = & gt; item.MapFrom (i = & gt; i.address। ... ) यह एक संग्रह के रूप में दिखाया गया है। Automapper का उपयोग करके इस मैपिंग को कैसे हल करें

प्रत्येक उदाहरण सीएलएस 2 का एक पता है, कुछ अन्य जानकारी के साथ-साथ क्लॉस 1 के प्रत्येक उदाहरण के पते का एक संग्रह है। इसलिए सीएलएस 1 से सीएलएस 2 तक सीधे मैप करने के लिए संभव नहीं होगा, जब तक कि आप मान नहीं करते हैं कि क्लिस 1 के प्रत्येक उदाहरण में केवल एक ही पता है। / P>

इस पर काबू पाने के लिए, एक क्लस्टर 1 को एकाधिक सीएलएस 2 में एक denormalised ऑब्जेक्ट के साथ एक पते को चिह्नित करें जो एक पते के साथ-साथ उसके अभिभावक सीएलएस 1 को दर्शाता है। मैपिंग तो denormalised representation से cls2 तक हो सकता है।

  सार्वजनिक वर्ग Cls1 और पता {सार्वजनिक Cls1 Cls1; सार्वजनिक पता पता; } [टेस्ट] सार्वजनिक शून्य DenormalizationApproach () {AutoMapper.Mapper.CreateMap & lt; Cls1AndAddress, Cls2 & gt; () .मेल के लिए (dest = & gt; dest.Prop1, opt = & gt; opt.MapFrom (src = & gt; src.Cls1.Name )) .मेल के लिए (dest = & gt; dest.Street, opt = & gt; opt.MapFrom (src = & gt; src.Address.Street)) .मेल के लिए (dest = & gt; dest.HouseNumber, opt = & gt; opt.MapFrom (Src = & gt; src.Address.HouseNumber)); Var c1 = नया Cls1 {पता = नया सूची & lt; पता & gt; {नया पता {सड़क = "एफू", हाउसनंबर = 1}, नया पता {सड़क = "बार", हाउसनंबर = 2},}}; Var denormalized = c1.एड्रेसस। चयन करें (पता = & नया; Cls1 और पता {Cls1 = c1, पता = पता}); Var सी 2 = ऑटोमैपरपर.मैपर.मैप & lt; IEnumerable & lt; Cls1AndAddress & gt ;, IEnumerable & lt; Cls2 & gt; & gt; (denormalized); Var c2Array = c2.ToArray (); आश्वासन। पूर्वार्द्ध (2, c2Array.Length); आश्वासन। आरईक्वॉल ("एफू", सी 2 एरे [0] .स्ट्रीट); आश्वासन। पूर्वार्द्ध ("बार", सी 2 एरे [1] .स्ट्रीट); }  

दूसरी तरफ, यदि प्रति cls1 में केवल एक पता है, तो आप इसे अपने मैपिंग में मानने का और अधिक प्रत्यक्ष मार्ग का उपयोग कर सकते हैं:

  [टेस्ट] सार्वजनिक शून्य मान AssingElectroach () {AutoMapper.Mapper.CreateMap & lt; Cls1, Cls2 & gt; () .मेल मेम्बर (dest = & gt; dest.Street, opt = & gt; opt.MapFrom (src = & gt; एसआरसी। एड्रेस। सिंगल ) .स्ट्रीट)) .मेल (dest = & gt; dest.HouseNumber, opt = & gt; opt.MapFrom (src = & gt; src.Addresses.Single (।) HouseNumber)); Var c1 = नया Cls1 {पता = नया सूची & lt; पता & gt; {नया पता {सड़क = "एफू", हाउसनंबर = 1}, // नया पता {सड़क = "बार", हाउस नंबर = 2}, यह विफलता का कारण होगा}}; Var c2 = ऑटोमैपरपर.मैपर। मैप & lt; Cls1, Cls2 & gt; (सी 1); आश्वासन। आरईक्वॉल (सी 2.स्ट्रीट, "एफू"); }  

Comments

Popular posts from this blog

python - Overriding the save method in Django ModelForm -

html - CSS autoheight, but fit content to height of div -

qt - How to prevent QAudioInput from automatically boosting the master volume to 100%? -