2012-03-01 16 views
5

में गायब सदस्य ऑटोमैपर 2.0 में मैंने मैपिंग को कॉन्फ़िगर करने के लिए प्रोफाइल का उपयोग किया। मैं अपने स्रोत और गंतव्य संपत्ति नामों से मेल खाने के लिए SourceMemberNameTransformer और DestinationMemberNameTransformer का उपयोग करता हूं।ऑटोमैपर 2.1.265

2.1.265 में ये गुण अब प्रोफ़ाइल पर नहीं हैं। क्या किसी को पता है कि उन्हें क्यों हटा दिया गया था? लेकिन सबसे महत्वपूर्ण बात यह है कि मैं इस कार्यक्षमता को कैसे डुप्लिकेट कर सकता हूं।

संपादित

मैं SourceMemberNamingConvention और DestinationMemberNamingConvention को देखकर किया गया है, लेकिन मैं कैसे उन काम करने के लिए के रूप में किसी भी प्रलेखन नहीं मिल रहा। क्या किसी को कस्टम INamingConvention का उपयोग करने का अनुभव है?

संपादित 2

स्रोत के सदस्यों को एक 3 पार्टी डेटाबेस से उत्पन्न कर रहे हैं। आम तौर पर वे शब्दों के बीच अंडरस्कोर के साथ सभी लोअरकेस कॉलम नामों का उपयोग करते हैं। कभी-कभी वे अंडरस्कोर छोड़ देते हैं, कभी-कभी वे यादृच्छिक पूंजीकरण में फेंक देते हैं।

गंतव्य सदस्य जितना संभव हो सके .NET नामकरण सम्मेलनों का पालन करने का प्रयास करते हैं। अंडरस्कोर हटा दिए गए थे, अंडरस्कोर के बाद पहला अक्षर पूंजीकृत था। सदस्य नामों को पढ़ने में आसान बनाने के लिए अतिरिक्त केस परिवर्तन किए गए थे।

इस का समाधान करने के लिए, मैं भविष्य के लोगों के लिए

SourceMemberNameTransformer = name => name.Replace("_", "").ToUpper() 
DestinationMemberNameTransformer = name => name.ToUpper() 

संपादित 3

अधिक जानकारी निर्धारित किया है।

मैंने स्रोत का निरीक्षण किया कि INamingConvention का उपयोग कैसे किया जाता है। जिस तरह से इसे थोड़ा भ्रामक बनाया गया है। इंटरफेस के रूप में

public interface INamingConvention 
{ 
    Regex SplittingExpression { get; } 
    string SeparatorCharacter { get; } 
} 

हालांकि befined है, AutoMapper उपयोगकर्ता नहीं दोनों SourceMemberNamingConvention और DestinationMemberNamingConvention

यह गंतव्य प्रकार के प्रत्येक सदस्य को ले जाता है और DestinationMemberNamingConvention.SplittingExpression लागू होता है के लिए इंटरफ़ेस की पूरी परिभाषा है। फिर यह उन मिलान भागों को लेता है और SourceMemberNamingConvention.SeparatorCharacter का उपयोग करके string.Join पर कॉल करता है। इसके बाद स्रोत प्रकार के सदस्यों को गंतव्य प्रकार के सदस्यों से मिलान करने का प्रयास किया जाता है।

यह क्या है और यह पूर्ण कार्यक्षमता का वर्णन करने का प्रयास नहीं है, यह एक बहुत ही उच्च स्तर का अवलोकन है। यह केवल यह दिखाने के लिए है कि कैसे INamingConvention का उपयोग किया जाता है और यह दिखाने के लिए कि SourceMemberNamingConvention.SplittingExpression और DestinationMemberNamingConvention.SeparatorCharacter का उपयोग कभी नहीं किया जाता है।

यदि आप इस रणनीति का उपयोग कर गंतव्य सदस्यों को बदलने में असमर्थ हैं, तो आपको गुणों को मैन्युअल रूप से nemesv's answer सुझावों के रूप में चिह्नित करना होगा।

उत्तर

1

यह सुविधा हटा दी गई है GitHub देखें। सवाल अपडेट के बाद

संपादित पुनर्लेखन:

शायद LowerUnderscoreNamingConvention में बनाया आपकी समस्या नहीं सुलझती। मैं इस कोड के साथ परीक्षण किया है:

Mapper.Initialize(c => 
    c.SourceMemberNamingConvention = new LowerUnderscoreNamingConvention()); 
Mapper.CreateMap<Source, Dest>(); 
var test = Mapper.Map<Dest>(
    new Source() { test_Another_Prop = "test", test_this_prop = "test" }); 

कहाँ Source और Dest:

public class Source 
{ 
    public string test_this_prop { get; set; } 
    public string test_Another_Prop { get; set; } 
    public string test_wronglynamedprop { get; set; } 
} 

public class Dest 
{ 
    public string TestThisProp { get; set; } 
    public string TestAnotherProp { get; set; } 
    public string TestWronglyNamedProp { get; set; } 
} 

यह आपके सभी मामलों आप जाँच कर सकते हैं कि यह कैसे in the source लागू किया और अपने खुद के convetion बनाने है को कवर नहीं करता है।

संपादित करें: टिप्पणी के बाद:

जब सम्मेलन लागू नहीं होता तुम वापस गिर सकता है मैन्युअल रूप से विशेष मामलों ओवरराइड करने के लिए:

Mapper.CreateMap<Source, Dest>() 
    .ForMember(d => d.TestWronglyNamedProp, c => c 
    .MapFrom(s => s.test_wronglynamedprop)); 

मैं वर्तमान संस्करण में कोई अन्य विकल्प देखें। क्योंकि जहां तक ​​कुछ भी नहीं देखा जाता है MemberNameTransformer एस को प्रतिस्थापित करता है।

+0

हां, मैंने पहले ही इसे देखा है। यह मेरी मदद नहीं करता क्योंकि मैं उपसर्ग या पोस्टफिक्सेस के साथ कुछ भी नहीं करता हूं। – cadrell0

+0

क्या आप एक उदाहरण प्रदान कर सकते हैं जो दिखाता है कि आप क्या हासिल करने की कोशिश कर रहे हैं? – nemesv

+0

मैंने प्रश्न – cadrell0

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