मैंने आज ऑटोमैपर 2.0.0 से 2.2.0 तक अपडेट किया और एहसास हुआ कि अपडेट कुछ कोड तोड़ दिया। Automapper github साइट पर किसी समस्या के रूप में पोस्ट करने से पहले यहां इसके बारे में पूछना चाहता था।क्या यह ऑटोमैपर 2.0.0 और 2.2.0 के बीच एक तोड़ने वाला परिवर्तन है?
अपने गंतव्य प्रकार के आरंभ तो की तरह एक संग्रह संपत्ति:
public class PageOf<TModel>
{
public PageOf()
{
Items = Enumerable.Empty<TModel>();
}
public IEnumerable<TModel> Items { get; set; }
}
automapper 2.0.0 के साथ
, इस ठीक था। जब मैंने 2.2.0 पर अपडेट किया, तो इस गंतव्य प्रकार के मानचित्रण ने संदेश के साथ एक NotSupportedException का कारण बना दिया "संग्रह एक निश्चित आकार का था।" (यह अपवाद एक AutoMapperMappingException अंदर लपेटा गया था।)
मैं इस के लिए ऊपर निर्माता कोड को बदलने के द्वारा इस मुद्दे को ठीक करने में सक्षम था:
public PageOf()
{
Items = new List<TModel>();
}
ऐसा लगता है मानो AutoMapper 2.0.0 को त्यागकर गया था जो कुछ भी मूल्य था आइटम प्रॉपर्टी में और set
प्रॉपर्टी एक्सेसर का उपयोग करते हुए, जबकि ऑटोमैपर 2.2.0 सिर्फ get
प्रॉपर्टी एक्सेसर का उपयोग कर रहा है और मौजूदा आईनेमरेबल को संशोधित करने का प्रयास कर रहा है। ऐसा लगता है कि Enumerable.Empty<TModel>()
सिर्फ शून्य-लंबाई सरणी को प्रतिस्थापित कर रहा है, जो अपवाद की व्याख्या करेगा।
क्या यह एक बग है? 2.0.0 और 2.2.0 के बीच ऑटोमैपर में क्या बदल गया है जो गंतव्य गंतव्य सेटटर को अनदेखा कर देगा और इसके बजाय मौजूदा संग्रह को संशोधित करने का प्रयास करेगा?
अद्यतन:
के रूप में अनुरोध किया है, यहाँ CreateMap कॉल है:
public class PagedQueryResultToPageOfItemsProfiler : Profile
{
protected override void Configure()
{
CreateMap<PagedQueryResult<EstablishmentView>, PageOfEstablishmentApiModel>();
}
}
PageOfEstablishmentApiModel
वर्ग PageOf<EstablishmentApiModel>
से विरासत।
var query = Mapper.Map<EstablishmentViewsByKeyword>(input);
var results = _queryProcessor.Execute(query);
var model = Mapper.Map<PageOfEstablishmentApiModel>(results); // exception here
एक विशेष मानचित्रण विन्यास AutoMapper में आवश्यक (for example .ConvertUsing(x => x)) 2.0.0 से 2.2.0 के लिए जा रहा है, तो हम पुराने संस्करण पर लटका करना पड़ सकता है:
यहाँ Mapper.Map कोड है। मुझे हमेशा पसंद आया कि एएम स्वचालित रूप से संग्रह गुणों को कैसे परिवर्तित करता है, और इसके बिना, एएम वैल्यू इंजेक्टर की तरह दिखता है। Mapper.Map<DestinationClass, SourceClass>(object to convert)
:
क्या आप अपना ऑटोमैपर कोड भी पोस्ट कर सकते हैं? यानी: 'Mapper.Map' विधि कॉल (क्या आप जेनेरिक तरीकों का उपयोग कर रहे हैं?)। यह "डिज़ाइन द्वारा" संभवतः सही मैपर विधि या मैपर कॉन्फ़िगरेशन के साथ आपके पुराने व्यवहार में वापस आ गया है। आप automapper से एक सरणी वापस कर सकते हैं और इसे अपनी आईनेमेरेबल प्रॉपर्टी को जिथब पर दस्तावेज़ों में असाइन कर सकते हैं। एक बार जब मैं अपना कोड देखता हूं तो मैप करने के बाद मैं एक उदाहरण या दो उत्तर के रूप में पोस्ट करूंगा। – BenSwayne
ऐसा नहीं लगता है कि आप यहां बहुत भाग्य प्राप्त करने जा रहे हैं। मेरा सुझाव है कि आप [ऑटोमैपर मेलिंग सूची] (https://groups.google.com/forum/?fromgroups#!forum/automapper-users) पर पूछें - यही वह जगह है जहां विशेषज्ञ बाहर निकलते हैं :) – Mightymuke
क्या आपने पहले ऑटोमैपर 2.2 की समीक्षा की थी पिछड़ा compatiblity रखने के लिए .0 समर्थन? ऐसे मामले हैं जहां किसी उत्पाद से सुविधाओं/कार्यक्षमताओं को बंद कर दिया जाता है (अब समर्थित नहीं है) और नए संस्करणों में ऐप्स रीफैक्टरिंग की आवश्यकता होती है। – G21