क्या एंटिटी फ्रेमवर्क कोड पहले उत्पादन में थोड़ा व्यर्थ / बेकार है और उत्पादन के लिए एक अच्छी EF रणनीति क्या है?


29

मैं हाल ही में एंटिटी फ्रेमवर्क 4.1 कोड फर्स्ट के साथ प्रोग्रामिंग कर रहा हूं और इसे विकास के लिए प्यार कर रहा हूं, लेकिन केवल एक अंत योजना और तेजी से बदलती फीचर सूची के साथ, मैं एप्लिकेशन की जरूरतों को पूरा करने के लिए कक्षा / डेटाबेस को लगातार संशोधित कर रहा हूं।

विकास में, कोई लाइव डेटा नहीं है और मैं आसानी से बस पूरे डेटाबेस को हटा सकता हूं इसलिए इसे नए स्कीमा के साथ फिर से बनाया गया है, जाहिर है, जब लाइव - यह बहुत बुरा है!

एकमात्र उपाय जो मैं देख सकता हूं, या तो मेटाडेटा तालिका को छोड़ना है और मैन्युअल रूप से डेटाबेस को सिंक में रखना है या मूल रूप से ड्रॉप और फिर से शुरू करना है।

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

तो सवाल वास्तव में है, क्या कोड फर्स्ट सिर्फ शुरुआती विकास के बारे में है और उत्पादन के माहौल के लिए ईएफ के प्रबंधन के लिए एक अच्छी रणनीति क्या है?


कुछ दिनों के लिए यह पूछने का मतलब है, यकीन नहीं था कि यह यहाँ सबसे अच्छा था या स्टैक ओवरफ्लो पर ...
wilhil

जवाबों:


15

मेरी राय है कि कोड पहली स्वचालित डेटाबेस निर्माण केवल विकास के लिए है। मैंने स्टैक ओवरफ्लो पर इसी तरह के सवालों के जवाब दिए, जहां मैंने दोनों को बताया कि डेटाबेस को कैसे अपग्रेड किया जाए और उत्पादन में स्वचालित कार्यक्षमता खराब क्यों है:

डेटाबेस को अपग्रेड करना अर्ध-मैनुअल कार्य है। इसके पीछे कोई स्वचालित अप्रयुक्त जादू नहीं होना चाहिए - इसके अलावा EF 4.1 में वर्तमान में ऐसा कोई जादू उपलब्ध नहीं है ( ADO.NET टीम के काम करने के बारे में केवल कुछ प्रस्तुति है)।

आप इस सवाल को और बेहतर तरीके से समझ सकते हैं कि वेब साइट्स कैसे अपग्रेड की जाती हैं।


फिर से हैलो! -आप EF के सवालों पर जल्दी हैं! :) ... पता नहीं मैं तुम्हारे बिना कहाँ होगा!
विल्हिल

कुछ महीने और मेरा कार्यक्रम काफी समाप्त हो गया है ... मैं इसे उत्तर के रूप में चिह्नित कर रहा हूं, लेकिन, मैं सोच रहा था कि क्या कुछ बदल गया है / क्या कोई संसाधन हैं जो मदद कर सकते हैं?
विल्हिल

2
"माइग्रेशन" का पहला सार्वजनिक पूर्वावलोकन जारी किया गया था। blogs.msdn.com/b/adonet/archive/2011/07/27/…
लादिस्लाव मृंका

धन्यवाद, कि अब देख! मुझे पहले कोड के साथ विकास करना पसंद था, लेकिन, मैं बाद में बदलने के बारे में बहुत परेशान / चिंतित हूं!
विल्हिल

आप ऐसे मामले को कैसे संभालते हैं जहां StoredProcs या दृश्य सीधे अन्य प्रयोजनों के लिए DB में बनाए जाते हैं जैसे कि रिपोर्टिंग जो कि एप्लिकेशन द्वारा उपयोग नहीं की जाती है। हमें यह जानना होगा कि पहले कोड में स्कीमा परिवर्तन से कौन से एसपी प्रभावित होते हैं।
मुलायम

5

उन्नयन स्क्रिप्ट बनाए रखें

डेटाबेस में ही, एक तालिका बनाए रखें जहां स्कीमा के संस्करण के साथ एक रिकॉर्ड रखा जाता है ।

जब आप आवेदन शुरू करते हैं, तो यह उस संस्करण के विरुद्ध संस्करण का पता लगाता है जिसे बायनेरिज़ द्वारा उपयोग किया जाना चाहिए। यदि यह अलग है, तो यह अपग्रेड स्क्रिप्ट को निष्पादित (या उपयोगकर्ता से पूछें) करता है।

पहले डेटाबेस का बैकअप लेना न भूलें।


अगला चरण: आपको निकाल दिया जाता है;) डेटाबेस अपडेट को पहले बैकअप के बिना स्वचालित रूप से अहं नहीं करना चाहिए - और संभवतः डाउनटाइम में, जब एक USER नया संस्करण नहीं चलाता है। आपका दृष्टिकोण एकदम सही है - त्रुटियों के टन के साथ बड़े तैनाती को बंद करने के लिए।
टॉमटॉम

@TomTom: जो निर्भर करता है। हम कई सालों से दोषपूर्ण तरीके से एक DB एप्लिकेशन चला रहे हैं जो वास्तव में ऐसा करता है: एक नए रिलीज के लिए स्वचालित स्कीमा बदल जाता है, जब यह बहुत पुराने संस्करण का पता लगाता है। बैकअप प्रतिदिन या तो किया जाता है, और हम सभी स्कीमा परिवर्तन को पिछड़े संगत (केवल फ़ील्ड और तालिकाओं को जोड़ते हुए, कभी भी नहीं हटाते) रखते हैं। मैं मानता हूं कि आपके द्वारा उल्लिखित उपाय महत्वपूर्ण हैं जब परिवर्तन पीछे की ओर संगत नहीं होते हैं, और आप सभी क्लाइंट अनुप्रयोगों को एक साथ अपडेट करने की गारंटी नहीं दे सकते हैं (उदाहरण के लिए, बड़े उद्यम डीबी के लिए)।
डॉक ब्राउन

शीर्ष पर यदि परिवर्तन गैर तुच्छ हैं। 2tb तालिका में एक फ़ील्ड को बदलने का प्रयास करें (और हां, मैं इससे निपटता हूं - और यह डेटा वेयरहाउस भी नहीं है)। आपने अपने आप को एक ऐसे परिदृश्य में डाल दिया, जहाँ आप तकनीकी ऋण जमा कर रहे हैं क्योंकि आप कभी भी ADD फ़ील्ड्स को प्राप्त कर सकते हैं, कभी भी सफाई न करें।
टॉमटॉम

2

यह सवाल किसी भी तरह से दोषपूर्ण है कि यह प्रोग्रामिंग मॉडल और रनटाइम वातावरण के बीच संबंध बनाता है जहां कोई नहीं है।

कोड पहले मुख्य रूप से एक विकास गति चालक है और वास्तव में रनटाइम सिस्टम से जुड़ा नहीं है।

उत्पादन में आपके पास ठीक से कॉन्फ़िगरेशन सेटिंग होगी जो रनटाइम को डीबी मॉडल को हटाने / अपडेट करने की संभावना से इनकार करती है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.