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

Popular posts from this blog

c# - sqlDecimal to decimal clr stored procedure Unable to cast object of type 'System.Data.SqlTypes.SqlDecimal' to type 'System.IConvertible' -

Calling GetGUIThreadInfo from Outlook VBA -

Obfuscating Python code? -