2016-09-19 4 views
6

मैं OnModelCreating अधिभावी कर रहा हूँ, और विधि में लाइन base.OnModelCreating(modelBuilder);आधार है। ऑनमोडेल क्रिएटिंग (मॉडलबिल्डर) आवश्यक है?

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    base.OnModelCreating(modelBuilder); 
} 

कोड नमूने और कैसे इस को लागू करने पर मैनुअल को देखते हुए वहाँ है, मैं के रूप में मौसम के लिए मैं यह नहीं की जरूरत है या भ्रमित हो। कभी-कभी यह वहां होता है, कभी-कभी नहीं। कभी-कभी विधि की शुरुआत में, अंत में दूसरी बार।

मुझे इसके साथ क्या करना चाहिए?

उत्तर

3

documentation के अनुसार, यह कोई फर्क नहीं पड़ता अगर आप DbContext वर्ग से सीधे वारिस:

इस विधि कहा जाता है जब एक व्युत्पन्न संदर्भ के लिए मॉडल शुरू कर दिया गया है, लेकिन मॉडल किया गया है से पहले लॉक डाउन और संदर्भ शुरू करने के लिए इस्तेमाल किया। इस विधि का डिफ़ॉल्ट कार्यान्वयन कुछ भी नहीं करता है, लेकिन इसे एक व्युत्पन्न कक्षा में ओवरराइड किया जा सकता है जैसे मॉडल को लॉक होने से पहले इसे कॉन्फ़िगर किया जा सकता है।

दूसरे शब्दों में, के बाद से है बुला base.OnModelCreating आवश्यक नहीं है, परिभाषा द्वारा कुछ भी नहीं करता है, लेकिन एक ही समय में चोट नहीं होगा अगर कहा जाता है - यही कारण है कि कभी कभी यह वहाँ नहीं है, कभी कभी है। कभी-कभी विधि की शुरुआत में, अंत में दूसरी बार।

+0

मैं समझ गया। फिर भी, जब यह कुछ भी नहीं करता है तो इसे क्यों बुलाया जाएगा? मेरा मतलब है, मुझे लगता है कि ओवरराइड मॉडलबिल्डर देता है जिसमें हम और कॉन्फ़िगरेशन डाल सकते हैं। लेकिन आधार पर कॉल क्यों? या दूसरे शब्दों में, मॉडलबिल्डर के साथ क्या होता है हम इसमें प्रवेश करते हैं। यह सब कुछ लगता है ... बेकार :-) –

+0

यही बात है।जब आपके पास आधार 'आभासी' विधि होती है, तो उस विधि को कॉल करने की आवश्यकता को समझाते हुए कुछ दस्तावेज होना चाहिए, जब आप इसे ओवरराइड करते हैं, जैसे कि आपको इसे कॉल करने की आवश्यकता है, अगर आपको इसे शुरुआत में या कॉल पर कॉल करने की आवश्यकता है समाप्त। यहां दस्तावेज़ीकरण बताता है कि विधि कुछ भी नहीं करती है, इसलिए कोई आवश्यकता नहीं है - यदि आप चाहें तो आप इसे अपने ओवरराइड के किसी भी स्थान पर कॉल कर सकते हैं या आप इसे बिल्कुल कॉल नहीं कर सकते हैं। एक बार जब आप जानते हैं कि यह परिभाषा ** द्वारा ** कुछ भी नहीं करता है, तो आप शायद इसे कॉल नहीं करेंगे :) –

2

यहाँ Pawel Kadluczka - MSFT कहते हैं ...

पल यह वास्तव में कोई फर्क नहीं पड़ता पर। OnModelCreating और बीज दोनों विधियों में उनके आधार वर्गों में कोई कार्यान्वयन नहीं है (यानी फ़ंक्शंस खाली हैं)। इसलिए बेस क्लास में कॉल करना मूल रूप से नो-ऑप है। मुझे नहीं लगता कि यह परिवर्तन (विशेष रूप से बीज विधि के लिए? - हम कैसे पता होगा क्या करने के लिए डेटा डेटाबेस में डाल) की कोई योजना नहीं है करते

सामान्य संरक्षित तरीकों में आधार कक्षाओं में कुछ कार्यान्वयन हो सकता है। उस स्थिति में यह से प्राप्त होने वाले डेवलपर पर निर्भर करता है कि वह कक्षा 12 में विधि में प्रदान की गई कार्यक्षमता का लाभ लेना चाहेगा या नहीं। यदि डेवलपर सोचता है कि वह केवल बेस क्लास में विधि द्वारा प्रदत्त कार्यक्षमता में कुछ जोड़ना चाहता है, तो वह इस विधि में पर कॉल करेगा। अन्यथा वह बेस क्लास की विधि में कॉल नहीं करेगा और व्युत्पन्न कक्षा पर विधि में सभी आवश्यक कार्यक्षमता प्रदान करेगा।

संदर्भ:Link

+0

क्या कहते हैं कि एक व्यक्ति (एमएसएफटी या नहीं) वास्तव में कोई फर्क नहीं पड़ता। केवल एक ही महत्वपूर्ण बात यह है कि ** आधिकारिक दस्तावेज़ीकरण ** (और यदि यह गलत है, तो यह एक बग है जिसे रिपोर्ट और तय किया जाना चाहिए - स्पष्ट रूप से यह मामला यहां नहीं है)। –

+0

हम्म .. दोनों यहाँ समान हैं: डी @IvanStoev – Sampath

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