2011-06-23 13 views
8

किसी कारण से, एक लूप जो मैं ऑटोमैपर मानचित्र परिभाषा में उपयोग करता हूं, उससे अधिक तेज़ हो रहा है।एक ऑटोमैपर मानचित्र में एक foreach में अतिरिक्त पुनरावृत्तियों

नक्शा परिभाषा:

Mapper.CreateMap<AdminGameEditModel, Game>() 
     .BeforeMap((s, d) => 
     { 
      foreach (var platId in s.PlatformIDs) 
      { 
       Platform newPlat = _gameRepository.GetPlatform(platId); 

       d.Platforms.Add(newPlat); 
      } 
     }) 
     .ForMember(dest => dest.BoxArtPath, opt => opt.Ignore()) 
     .ForMember(dest => dest.IndexImagePath, opt => opt.Ignore()) 
     .ForMember(dest => dest.Cons, opt => opt.MapFrom(src => String.Join("|", src.Cons))) 
     .ForMember(dest => dest.Pros, opt => opt.MapFrom(src => String.Join("|", src.Pros))) 
     .ForMember(dest => dest.LastModified, opt => opt.UseValue(DateTime.Now)) 
     .ForMember(dest => dest.Platforms, opt => opt.Ignore()); 

foreach BeforeMap में, किसी कारण से, s.PlatformIDs सरणी कई बार से अधिक पुनरावृति होगी। इसलिए, उदाहरण के लिए, यदि इसमें दो मान हैं, तो मुझे दो या दो से अधिक पुनरावृत्तियों मिलेगा, दो अपेक्षित मान दोहराने के साथ। प्लेटफार्म को दो आयामी सरणी के रूप में परिभाषित नहीं किया गया है, और डीबगर पुष्टि करता है कि सरणी में केवल दो मान वाले सेट होते हैं, बिना किसी दोहराने वाले सेट के।

मैं इस बात के बारे में सोच रहा हूं कि इसका क्या कारण हो सकता है।


संपादित करें: पाश के साथ, मैं निम्नलिखित breakpoints है -

.BeforeMap((s, d) => 
{ 
    foreach (var platId in s.PlatformIDs) // breakpoint 1 
    { 
     Platform newPlat = _gameRepository.GetPlatform(platId); // breakpoint 2 

     d.Platforms.Add(newPlat); 
    } // breakpoint 3 
}) 

पहले पास सामान्य है - ब्रेकपॉइंट 1 -> ब्रेकपाइंट 2 -> ब्रेकपाइंट 3. यह तो 2 के लिए वापस जाना होगा , फिर 3 तक, जो अपेक्षित है। अजीब बात यह है कि यह फिर ब्रेकपॉइंट 1 पर वापस कूद जाएगा, और फिर से प्रक्रिया शुरू कर देगा।

मुझे यकीन नहीं है कि कोई पैटर्न है या नहीं। दो सरणी मान छह पास में परिणाम होते हैं। चार सरणी में एक सरणी मान परिणाम।


संपादित करें 2: मेरा कूबड़ सही था - BeforeMap एक बार से अधिक फायरिंग कर रहा है।


संपादित करें 3: समस्या के रूप में अच्छी तरह से AfterMap में बनी रहती है। विधि प्रति मैपिंग में एक से अधिक बार निष्पादित करता है।

+0

क्या आपने लूप पर कदम रखा है? – boca

+0

हाँ, और यह इसके मुकाबले ज्यादा उत्साहित है। अधिक जानकारी के लिए मेरा संपादन देखें –

+0

मुझे आश्चर्य है कि क्या पहले मैप वास्तव में कई बार फायरिंग कर रहा है, शायद एक बार ForMember या कुछ। –

उत्तर

4

एक कानूनी बग दिखाई देता है, जो कुछ इसी तरह से निर्णय लेता है: http://automapper.codeplex.com/workitem/6604। मैंने इसे ऑटोमैपर के गिटहब पर एक मुद्दा के रूप में लिखा है, और इस मुद्दे को इस प्रश्न से जोड़ा है ताकि देव देख सकें कि मैं क्या करने का प्रयास कर रहा था।

संबंधित मुद्दे