c# - AutoMapper and inheritance - How to Map? -
इस परिदृश्य को करें:
सार्वजनिक वर्ग बेस {सार्वजनिक स्ट्रिंग नाम; } पब्लिक क्लास क्लास ए: बेस {सार्वजनिक int32 संख्या; } पब्लिक क्लास कक्षा बी: बेस {सार्वजनिक स्ट्रिंग विवरण;} सार्वजनिक वर्ग डीटीओ {सार्वजनिक स्ट्रिंग नाम; सार्वजनिक int32 संख्या; सार्वजनिक स्ट्रिंग विवरण; }
मेरे पास एक आईएलआईटी और लेफ्टिनेंट; बेस & gt;
मेरे नक्शे हैं:
ऑटोमैपर। मैपर। क्रेटमैप & lt; IList & lt; बेस & gt; , आईआईएलआईटी एंड एलटी; डीटीओ & gt; & gt; () .मेल मेम्बर (डेस्ट = & gt; डिस्ट.नंबर, ऑप्ट = & gt; ऑप्ट। अन्वेषण करें ()) .मेल के लिए (डेस्ट = & gt; डिस्ट। डिस्क्रिप्शन, ऑप्टी = & gt; opt.Ignore () ); AutoMapper.Mapper.CreateMap & lt; ClassA, DTo & gt; () .मेल के लिए (dest = & gt; dest.Description, opt = & gt; opt.gnore ()); AutoMapper.Mapper.CreateMap & lt; ClassB, DTO & gt; () .मेल के लिए (dest = & gt; dest.Number, opt = & gt; opt.Ignore ()) Mapper.AssertConfigurationIsValid (); //ठीक है!
लेकिन क्लास ए या क्लासबी में मौजूद गुणों को मैप नहीं किया जाता है जब मैं ऐसा करता हूं:
IList & lt; डीटीओ & gt ;: ऑटोमैपरपर। मैपर। मैप & lt; IList & lt; बेस & gt;, IList & LT; डीटीओ & gt; & gt; (baseList);
मैं ClasA
और ClassB
आपको अपने डोमेन वर्ग से मेल खाने वाली डीटीओ कक्षाएं बनाने की आवश्यकता होगी:
सार्वजनिक वर्ग डीटीओ {सार्वजनिक स्ट्रिंग नाम ; } सार्वजनिक वर्ग डीटीओ_ए: डीटीओ {सार्वजनिक पूर्णांक संख्या {प्राप्त; सेट; }} सार्वजनिक वर्ग DTO_B: डीटीओ {सार्वजनिक स्ट्रिंग विवरण {get; सेट; }}
फिर आपको अपने मैपिंग को इसमें बदलना होगा:
मैपर। क्रेटमैप & lt; बेस, डीटीओ & gt; ()। शामिल करें & lt; ClassA, DTO_A & gt; ()। शामिल करें & lt; कक्षाबी, डीटीओबी & gt; (); मैपर। क्रिएटैप & lt; क्लास ए, डीटीओ_ए & gt; (); मॅपर। क्रिएटमैप & lt; क्लासबी, डीटीओबी & gt; (); Mapper.AssertConfigurationIsValid ();
एक बार ऐसा किया जाता है, तो निम्न कार्य करेगा:
var baseList = नई सूची & lt; बेस & gt; {नया बेस {नाम = "बेस"}, नया वर्गए {नाम = "वर्ग", "संख्या = 1}", नया वर्गबी {नाम = "वर्गबी", विवरण = "देश"}}}; Var परीक्षण = मैपर। मैप & lt; IList & lt; बेस & gt;, IList & lt; डीटीओ & gt; & gt; (बेस लिस्ट); Console.WriteLine (परीक्षण [0] .Name); Console.WriteLine (परीक्षण [1] .Name); Console.WriteLine (((DTO_A) परीक्षण [1]) संख्या।); Console.WriteLine (परीक्षण [2] .Name); Console.WriteLine (((DTO_B) परीक्षण [2]) विवरण।); Console.ReadLine ();
दुर्भाग्य से इसका मतलब यह है कि आपके पास एक अवांछित कलाकार है, लेकिन मुझे नहीं लगता कि आप इसके बारे में बहुत कुछ कर सकते हैं।
Comments
Post a Comment