2010-11-18 13 views
8

क्या आप वास्तविक अनुप्रयोगों में SchemaExport और SchemaUpdate का उपयोग करते हैं? प्रारंभ में, आप मॉडल बनाते हैं और फिर स्कीमा उत्पन्न करते हैं? क्या यह काम करता है? या, आप यह केवल परीक्षण के लिए उपयोग करें ...एनएचबेर्नेट और कोड पहले

आमतौर पर, मैं और फिर मैपिंग और लगातार वर्ग या एफई संस्थाओं डिजाइनर का उपयोग कर (दृश्य स्टूडियो डेटाबेस परियोजना का प्रयोग करके) डाटाबेस पैदा करते हैं। लेकिन अब, मैं फ्लुएंट एनएचबेर्नेट के साथ कोड के पहले दृष्टिकोण को आजमा देना चाहता हूं।

मैंने स्कीमाएक्सपोर्ट और स्कीमा अपडेट का शोध किया है और कुछ मुद्दों को पाया है। उदाहरण के लिए, अद्यतन डीबी ऑब्जेक्ट्स को डिलीट नहीं करता है, तालिका मौजूद होने पर शून्य कॉलम जैसे शून्य कॉलम बनाता है, कई से अधिक टेबल पर प्राथमिक कुंजी उत्पन्न नहीं करता है और इसी तरह। इसका मतलब है कि मुझे अक्सर डीबी को फिर से बनाना होगा। लेकिन, डेटा के बारे में क्या है? और, कैसे उत्पादन db में परिवर्तन तैनात करने के लिए और इतने पर ...

मुझे पता है कि तुम सच में पहले कोड का उपयोग करते हैं और चाहते हैं SchemaExport (SchemaUpdate) अपने अनुप्रयोगों में? हो सकता है कि आप मुझे कुछ सलाह दे सकें ...

उत्तर

8

मैं उत्पादन में SchemaUpdate का उपयोग करता हूं। यह सुरक्षित रूप से सुरक्षित है क्योंकि यह स्तंभों को हटाने जैसे विनाशकारी संचालन कभी नहीं करता है। हालांकि, यह आपके डेटाबेस को अद्यतन करने के लिए एक व्यापक समाधान नहीं है। यदि आप इसका उपयोग करते हैं तो आपको अभी भी अपनी स्कीमा को हटाने के लिए स्क्रिप्ट को पूरक करना होगा (जैसा कि आप उल्लेख करते हैं), इंडेक्स, कॉलम प्रकार बदलना, तालिका डेटा जोड़ना आदि। लेकिन स्कीमा अपडेट में मेरे लिए 90% मामला शामिल है।

मैंने पाया है कि एकमात्र नकारात्मक पक्ष यह है कि समय के साथ ऐसा लगता है कि कभी-कभी मेरी मेज पर डुप्लिकेट विदेशी-कुंजी बाधाएं होती हैं।

एक और बात: आपको बिल्डिंग टूल से मैन्युअल रूप से SchemaUpdate चलाया जाना चाहिए, न कि आपके ऐप को। यह सुरक्षित नहीं है अपने आवेदन को अपने डीबी स्कीमा को संशोधित करने के अधिकार देने के लिए!

2

हां, आप इन वास्तविक अनुप्रयोगों में उपयोग कर सकते हैं; मैं करता हूँ।

बेशक, लगभग सभी काम उस पहले जाते हैं। मेरा अभ्यास एक अलग परियोजना बनाने के लिए किया गया है जो मेरी मुख्य परियोजना असेंबली में मैपिंग का संदर्भ देता है और डेटाबेस निर्माण और प्रारंभिक डेटा आयात, यदि कोई हो, को संभालता है।

एक बार परियोजना के उत्पादन में है, मैं आमतौर पर समाधान से है कि परियोजना उतारना, लेकिन संदर्भ के लिए चारों ओर इसे रखने या अगर मैं कभी से स्विच करने की आवश्यकता लिपियों अद्यतन करने के लिए स्क्रिप्ट पैदा करते हैं।

रास्ता NHibernate डेटाबेस बनाता है के रूप में, आप आप अन्यथा हो सकता है की तुलना में अपने सुविज्ञ मैपिंग में एक छोटे से अधिक विनिर्देश क्या करना है। मुझे डेटाबेस बनने के तरीके पर अधिकतम नियंत्रण रखने के लिए शून्य/नल, विदेशी कुंजी बाधा नाम इत्यादि निर्दिष्ट करना पसंद है।

मुझे नहीं लगता कि आप कभी भी इस परिदृश्य में ऑटोमैपिंग का उपयोग करना चाहते हैं।

4

मैं अपने मॉडल का तेजी से विकास के लिए SchemaUpdate/SchemaExport उपयोग करते हैं, लेकिन वे एक डेटाबेस माइग्रेशन टूल के लिए एक स्थानापन्न नहीं हैं। जैसा कि आप उल्लेख करते हैं, कई मामलों में डेटा को समझदार तरीके से माइग्रेट नहीं किया जा सकता है। उपकरण में पर्याप्त संदर्भ नहीं है। (उदाहरण के लिए आप एक पूर्णनाम कॉलम को फर्स्टनाम/लास्टनाम में स्वचालित रूप से कैसे माइग्रेट कर सकते हैं?) मैंने यहां एक समान प्रश्न का उत्तर दिया जहां मैं एनएचबीर्नेट के संदर्भ में डीबी माइग्रेशन टूल पर चर्चा करता हूं।

NHibernate, ORM : how is refactoring handled? existing data?

1

बस किसी भी पैदा कोड है कि क्या यह एक उपकरण या अपने प्रश्न में के रूप में डेटाबेस पीढ़ी से पोको पीढ़ी हो साथ, यह शायद आपको इस प्रक्रिया का 80% मिल जाएगा।वहां से यह सही होने के लिए अपनी इंडेक्स और किसी भी अन्य प्रदर्शन tweaks जोड़ने के लिए इसे अन्य 20% ट्विक करना बुद्धिमान होगा।

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