हालांकि यह सवाल डेटा की परवाह न करने से उत्पन्न होता है, कभी-कभी डेटा का रखरखाव आवश्यक है।
यदि हां, तो मैंने एंटिटी फ्रेमवर्क दुःस्वप्न से कैसे उबरने के लिए चरणों की एक सूची लिखी है जब डेटाबेस में पहले से ही समान नाम वाली तालिकाएँ हैं: एंटिटी फ्रेमवर्क दुःस्वप्न से कैसे उबरें - डेटाबेस में पहले से ही समान नाम वाली तालिकाएँ हैं
जाहिरा तौर पर ... एक मॉडरेटर ने मेरे पोस्ट को हटाने के लिए फिट देखा, इसलिए मैं इसे यहां पेस्ट करूंगा:
एंटिटी फ्रेमवर्क दुःस्वप्न से कैसे उबरें - डेटाबेस में पहले से ही समान नाम वाली तालिकाएं हैं
विवरण : यदि आप हमारी टीम में EF के लिए नए हैं, तो आप ऐसे राज्य में समाप्त हो जाएंगे, जहां आप या तो एक नया स्थानीय डेटाबेस नहीं बना सकते हैं या आप अपने उत्पादन डेटाबेस में अपडेट लागू नहीं कर सकते। आप एक साफ ईएफ वातावरण में वापस जाना चाहते हैं और फिर मूल बातें करना चाहते हैं, लेकिन आप नहीं कर सकते। यदि आप इसे उत्पादन के लिए काम कर रहे हैं, आप एक स्थानीय DB नहीं बना सकते हैं, और यदि आप इसे स्थानीय के लिए काम कर रहे हैं, अपने उत्पादन सर्वर सिंक से बाहर हो जाता है। और अंत में, आप किसी भी उत्पादन सर्वर डेटा को हटाना नहीं चाहते हैं।
लक्षण : अपडेट-डेटाबेस नहीं चला सकता क्योंकि यह निर्माण स्क्रिप्ट को चलाने की कोशिश कर रहा है और डेटाबेस में पहले से ही समान नाम वाली तालिकाएं हैं।
त्रुटि संदेश: System.Data.SqlClient.SqlException (0x80131904): डेटाबेस में '' नामक एक ऑब्जेक्ट पहले से ही है।
प्रॉब्लम बैकग्राउंड : EF समझता है कि वर्तमान डेटाबेस कहां है, इसकी तुलना में जहां डेटाबेस में टेबल पर आधारित कोड है, उसे dbo .__ माइग्रेशनहिस्टर कहा जाता है। जब यह माइग्रेशन लिपियों को देखता है, तो यह उन लिपियों पर पुनर्विचार करने की कोशिश करता है जहां यह स्क्रिप्ट के साथ आखिरी बार था। यदि ऐसा नहीं हो सकता है, तो यह उन्हें क्रम में लागू करने की कोशिश करता है। इसका मतलब है, यह प्रारंभिक निर्माण स्क्रिप्ट पर वापस जाता है और यदि आप यूपी कमांड में पहले भाग को देखते हैं, तो यह उस तालिका के लिए CreeateTable होगा जो त्रुटि हो रही थी।
इसे और विस्तार से समझने के लिए, मैं यहाँ संदर्भित दोनों वीडियो देखने की सलाह दूंगा:
https://msdn.microsoft.com/en-us/library/dn481501(v=vs.113).aspx
समाधान : हमें यह सोचने की ज़रूरत है कि इन CreateTable कमांड को लागू नहीं करते समय वर्तमान डेटाबेस अद्यतित है। साथ ही, हम अब भी चाहते हैं कि वे कमांड मौजूद रहें ताकि हम नए स्थानीय डेटाबेस बना सकें।
चरण 1: उत्पादन DB क्लीन
सबसे पहले, अपने उत्पादन db का बैकअप बनाएं। SSMS में, डेटाबेस पर राइट-क्लिक करें, "कार्य> निर्यात डेटा-स्तरीय एप्लिकेशन ..." का चयन करें और संकेतों का पालन करें। अपना उत्पादन डेटाबेस खोलें और dbo .__ माइग्रेशनहिस्टार तालिका को हटा दें / हटा दें।
चरण 2: स्थानीय वातावरण साफ
करें अपने माइग्रेशन फ़ोल्डर खोलें और इसे हटा दें। मैं मान रहा हूँ कि यदि आवश्यक हो तो आप इसे वापस प्राप्त कर सकते हैं।
चरण 3: आरंभिक को
फिर से बनाएँ , पैकेज मैनेजर में, "इनेबल-माइग्रेशंस" चलाएँ (EF आपको कई कॉनटेक्स्ट होने पर -ContextTypeName का उपयोग करने के लिए प्रेरित करेगा)। "ऐड-माइग्रेशन इनिशिएटिव -वरबोज" चलाएं। यह वर्तमान कोड के आधार पर खरोंच से डेटाबेस बनाने के लिए प्रारंभिक स्क्रिप्ट बनाएगा। यदि आपके पास पिछले कॉन्फ़िगरेशन में कोई बीज संचालन था, तो उस पार की प्रतिलिपि बनाएँ।
चरण 4: ट्रिक EF
इस बिंदु पर, अगर हमने अपडेट-डेटाबेस चलाया, तो हमें मूल त्रुटि प्राप्त होगी। इसलिए, हमें ईएफ को यह सोचने की ज़रूरत है कि यह इन आदेशों को चलाने के बिना, अद्यतित है। इसलिए, आपने अभी जो प्रारंभिक माइग्रेशन बनाया है, उसमें अप मेथड पर जाएं और इसे टिप्पणी दें।
चरण 5: अद्यतन-डेटाबेस
अप प्रक्रिया पर अमल करने के लिए कोई कोड के साथ, EF dbo .__ माइग्रेशनहिस्टर टेबल बनाएगा सही प्रविष्टि के साथ यह कहने के लिए कि उसने इस स्क्रिप्ट को सही तरीके से चलाया है। जाओ और अगर आप की तरह इसे बाहर की जाँच करें। अब, उस कोड को अनइंस्टॉल करें और सेव करें। आप अपडेट-डेटाबेस को फिर से चला सकते हैं यदि आप जांचना चाहते हैं कि ईएफ इसकी तारीख तक सोचता है। यह सभी CreateTable कमांड के साथ अप कदम को नहीं चलाएगा क्योंकि यह सोचता है कि यह पहले से ही ऐसा कर चुका है।
चरण 6: EF की पुष्टि करें अद्यतित है
यदि आपके पास वह कोड है जो अभी तक माइग्रेशन पर लागू नहीं हुआ था, तो यह वही है जो मैंने किया था ...
"ऐड-माइग्रेशन मिसिंग मिग्रेक्शंस" चलाएं यह व्यावहारिक रूप से एक खाली स्क्रिप्ट बनाएगा। क्योंकि कोड पहले से ही था, प्रारंभिक माइग्रेशन स्क्रिप्ट में इन तालिकाओं को बनाने के लिए वास्तव में सही आदेश थे, इसलिए मैंने क्रिएट और समकक्ष ड्रॉप कमांड को अप और डाउन विधियों में काट दिया।
अब, अपडेट-डेटाबेस को फिर से चलाएँ और डेटाबेस में उपयुक्त तालिकाओं का निर्माण करते हुए इसे अपनी नई माइग्रेशन स्क्रिप्ट निष्पादित करें देखें।
चरण 7: पुन: पुष्टि करें और प्रतिबद्ध करें।
निर्माण, परीक्षण, भागो। सुनिश्चित करें कि सब कुछ चल रहा है फिर बदलाव करें।
चरण 8: अपनी टीम के बाकी सदस्यों को आगे बढ़ने का तरीका बताएं।
जब अगला व्यक्ति अपडेट करता है, तो ईएफ को यह पता नहीं चलेगा कि यह किस हिट को दिया है जो स्क्रिप्ट पहले मौजूद नहीं थी। लेकिन, यह मानते हुए कि स्थानीय डेटाबेस को उड़ा दिया जा सकता है और फिर से बनाया जा सकता है, यह सब अच्छा है। उन्हें अपने स्थानीय डेटाबेस को छोड़ने और इसे ईएफ से फिर से बनाने की आवश्यकता होगी। यदि उनके पास स्थानीय परिवर्तन और लंबित माइग्रेशन हैं, तो मैं सलाह दूंगा कि वे अपने डीबी को फिर से मास्टर पर बनाएँ, अपनी सुविधा शाखा पर जाएँ और उन माइग्रेशन स्क्रिप्ट्स को फिर से बनाएँ।
DROP DATABASE
तो ....