एंटिटी फ्रेमवर्क के लिए डेटाबेस को फिर से कैसे बनाया जाए?


143

मैं अपने ASP.Net MVC 5 प्रोजेक्ट के साथ एक बुरी स्थिति में आ गया हूं, कोड-फर्स्ट एंटिटी फ्रेमवर्क का उपयोग कर रहा हूं। मुझे डेटा खोने की परवाह नहीं है, मैं बस नए सिरे से शुरू करने, डेटाबेस को फिर से बनाने और कोड-फर्स्ट माइग्रेशन का उपयोग करने में सक्षम होना चाहता हूं।

वर्तमान में मैं एक ऐसी स्थिति में हूं, जहां अपडेट-डेटाबेस के हर प्रयास के परिणामस्वरूप अपवाद को फेंक दिया जाता है या त्रुटि संदेश प्राप्त होता है। इसके अलावा वेबसाइट सही तरीके से डेटाबेस तक नहीं पहुंच सकती है। मैं सभी माइग्रेशनों को कैसे मिटा सकता हूं, डेटाबेस को फिर से बना सकता हूं और एक नई परियोजना बनाने के बिना खरोंच से शुरू कर सकता हूं? दूसरे शब्दों में, मैं अपना कोड रखना चाहता हूं लेकिन डेटाबेस को छोड़ देता हूं।

बाद में मैं सिंक में तैनाती डेटाबेस (एसक्यूआर पर एसक्यूएल सर्वर) भी प्राप्त करना चाहता हूं। फिर, मैं सभी डेटा छोड़ने का बुरा नहीं मानता - मैं सिर्फ इसे काम करना चाहता हूं।

कृपया स्वच्छ स्थिति में वापस आने के लिए कोई भी उपाय प्रदान करें। बहुत सराहना की।


टीबीएच अगर आप सरल करना चाहते हैं DROP DATABASEतो ....
वर्थ 7

जवाबों:


209

नीचे दिए गए चरणों का पालन करें:

1) सबसे पहले विजुअल स्टूडियो में सर्वर एक्सप्लोरर में जाएं, जांचें कि क्या इस प्रोजेक्ट के लिए ".mdf" डेटा कनेक्शंस जुड़े हुए हैं, यदि हां, तो राइट क्लिक करें और डिलीट करें।

2) सॉल्यूशन एक्सप्लोरर में जाएं, ऑल फाइल्स आइकन पर क्लिक करें।

3) इस प्रोजेक्ट के लिए App_Data पर जाएं, राइट क्लिक करें और सभी ".mdf" फाइलों को हटा दें।

4) माइग्रेशन फोल्डर को राइट क्लिक करके डिलीट करें।

5) SQL सर्वर प्रबंधन स्टूडियो में जाएं, सुनिश्चित करें कि इस परियोजना के लिए DB वहां नहीं है, अन्यथा इसे हटा दें।

6) विजुअल स्टूडियो में पैकेज मैनेजर कंसोल पर जाएं और टाइप करें:

  1. Enable-Migrations -Force
  2. Add-Migration init
  3. Update-Database

7) अपना एप्लिकेशन चलाएं

नोट: चरण 6 भाग 3 में, यदि आपको "फ़ाइल संलग्न नहीं कर सकता ..." त्रुटि मिलती है, तो यह संभवतः इसलिए है क्योंकि आपने डेटाबेस फ़ाइलों को SQL सर्वर में पूरी तरह से नहीं हटाया था।


अति उत्कृष्ट! यह काम किया, धन्यवाद! वास्तव में बहुत उपयोगी है। क्या तैनाती डेटाबेस (एज़्योर SQL) को फिर से बनाने के लिए समान हैं?
टॉबी शार्प

हाय @TobySharp, कोई समस्या नहीं। यदि आपके डेटाबेस में कोई डेटा नहीं है, तो आप इन चरणों का पालन कर सकते हैं, लेकिन यदि आपके पास डेटा है, तो चरण समान नहीं हैं।
लिन

मेरे पास कोई डेटा नहीं है जिसे मुझे रखने की आवश्यकता है।
टॉबी शार्प

3
अपडेट करें, यदि आप वीएस (निर्देशों के अनुसार) से हटाते हैं और विंडोज एक्सप्लोरर नहीं, तो यह काम करता है। इसके अलावा, यदि आपके पास SQL ​​मैनेजमेंट स्टूडियो नहीं है, तो आप लोकल से हटाने के लिए VS में Sql ऑब्जेक्ट एक्सप्लोरर का उपयोग कर सकते हैं।
माइक वार्ड

3
यदि आपको "फ़ाइल संलग्न नहीं कर सकता है ..." त्रुटि हो रही है, तो भी आपको विश्वास है कि आपने सब कुछ हटा दिया है, इस धागे से उत्तर का प्रयास करें: stackoverflow.com/questions/13275054/…
एंडी

44

मैं जोड़ना चाहूंगा कि लिन का जवाब सही है।

यदि आप अनुचित रूप से एमडीएफ को हटाते हैं तो आपको इसे ठीक करना होगा। एमडीएफ में परियोजना में खराब हुए कनेक्शन को ठीक करने के लिए। संक्षिप्त जवाब; इसे पुनः बनाएं और इसे ठीक से हटा दें।

  1. एक नया एमडीएफ बनाएं और इसे पुराने एमडीएफ की तरह ही नाम दें, इसे उसी फ़ोल्डर लोकेशन में रखें। आप एक नया प्रोजेक्ट बना सकते हैं और एक नया mdf बना सकते हैं। Mdf को आपकी पुरानी तालिकाओं से मेल नहीं खाता, क्योंकि वे इसे हटाने जा रहे थे। इसलिए पुराने फोल्डर को सही फोल्डर बनाएं या कॉपी करें।
  2. इसे सर्वर एक्सप्लोरर में खोलें [समाधान एक्सप्लोरर से mdf पर डबल क्लिक करें]
  3. सर्वर एक्सप्लोरर में इसे हटा दें
  4. इसे सॉल्यूशन एक्सप्लोरर से डिलीट करें
  5. रन update-database -force [यदि आवश्यक हो तो बल का उपयोग करें]

हो गया, अपने नए db का आनंद लें

अद्यतन 11/12/14 - मैं इसका उपयोग हर समय करता हूं जब मैं ब्रेकिंग डीबी परिवर्तन करता हूं। मैंने पाया कि मूल db में अपने माइग्रेशन को वापस लाने का यह एक शानदार तरीका है:

  • मूल पर वापस db डालता है
  • इसे वापस चालू करने के लिए सामान्य माइग्रेशन चलाएं

    1. Update-Database -TargetMigration:0 -force [यह सभी तालिकाओं और सभी डेटा को नष्ट कर देगा।]
    2. Update-Database -force [यदि आवश्यक हो तो बल का उपयोग करें]

1
बहुत मदद करने के लिए खुश ... मैं अपना जवाब अपडेट करने जा रहा हूं। मुझे हाल ही में सभी परिवर्तनों को रोलबैक करने का एक बेहतर तरीका मिला।
स्टीव कोलमैन

8

यह मेरे लिए काम किया:

  1. Visual Studio में SQL सर्वर ऑब्जेक्ट एक्सप्लोरर से डेटाबेस हटाएं। हटाएँ पर राइट-क्लिक करें और चुनें।
  2. फाइल सिस्टम से mdf और ldf फाइल को डिलीट करें - यदि वे अभी भी वहाँ हैं।
  3. समाधान का पुनर्निर्माण करें।
  4. अनुप्रयोग शुरू करें - डेटाबेस फिर से बनाया जाएगा।

1
हाँ, मुझे बस इतना करना था कि MDF को हटा दिया गया था, web.config में कनेक्शन स्ट्रिंग को अपडेट करें, फिर एप्लिकेशन चलाएं और एक नया खाता पंजीकृत करें। इसने नए डेटाबेस में स्वचालित रूप से फिर से सभी तालिकाओं का निर्माण किया।
डैन बेहार्ड

3

हालांकि यह सवाल डेटा की परवाह न करने से उत्पन्न होता है, कभी-कभी डेटा का रखरखाव आवश्यक है।

यदि हां, तो मैंने एंटिटी फ्रेमवर्क दुःस्वप्न से कैसे उबरने के लिए चरणों की एक सूची लिखी है जब डेटाबेस में पहले से ही समान नाम वाली तालिकाएँ हैं: एंटिटी फ्रेमवर्क दुःस्वप्न से कैसे उबरें - डेटाबेस में पहले से ही समान नाम वाली तालिकाएँ हैं

जाहिरा तौर पर ... एक मॉडरेटर ने मेरे पोस्ट को हटाने के लिए फिट देखा, इसलिए मैं इसे यहां पेस्ट करूंगा:

एंटिटी फ्रेमवर्क दुःस्वप्न से कैसे उबरें - डेटाबेस में पहले से ही समान नाम वाली तालिकाएं हैं

विवरण : यदि आप हमारी टीम में 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: अपनी टीम के बाकी सदस्यों को आगे बढ़ने का तरीका बताएं। जब अगला व्यक्ति अपडेट करता है, तो ईएफ को यह पता नहीं चलेगा कि यह किस हिट को दिया है जो स्क्रिप्ट पहले मौजूद नहीं थी। लेकिन, यह मानते हुए कि स्थानीय डेटाबेस को उड़ा दिया जा सकता है और फिर से बनाया जा सकता है, यह सब अच्छा है। उन्हें अपने स्थानीय डेटाबेस को छोड़ने और इसे ईएफ से फिर से बनाने की आवश्यकता होगी। यदि उनके पास स्थानीय परिवर्तन और लंबित माइग्रेशन हैं, तो मैं सलाह दूंगा कि वे अपने डीबी को फिर से मास्टर पर बनाएँ, अपनी सुविधा शाखा पर जाएँ और उन माइग्रेशन स्क्रिप्ट्स को फिर से बनाएँ।


1

बस @Lin के उत्कृष्ट उत्तर को जोड़ना चाहते हैं:

5) B. यदि आपके पास SQL ​​प्रबंधन स्टूडियो नहीं है, तो "SQL सर्वर ऑब्जेक्ट एक्सप्लोरर" पर जाएं। यदि आप अपना प्रोजेक्ट db को लोकल db "SQL सर्वर ऑब्जेक्ट एक्सप्लोरर" में नहीं देख सकते हैं, तो इसे मैन्युअल रूप से सूची में जोड़ने के लिए "SQL सर्वर जोड़ें" बटन पर क्लिक करें। तब आप डीबी को सूची से हटा सकते हैं।


यदि आप किसी उत्तर में कुछ जोड़ना चाहते हैं, तो कृपया एक नया उत्तर पोस्ट करने के बजाय उस उत्तर में एक टिप्पणी जोड़ें।
ओलिवर

1
मुझे इसकी जानकारी नहीं थी। तो अब आप अपने उत्तर को एक टिप्पणी में स्थानांतरित कर सकते हैं और इस उत्तर को हटा सकते हैं क्योंकि तकनीकी रूप से यह प्रश्न का एक (पूर्ण) उत्तर नहीं है :-)
ओलिवर

0

एक बहुत ही सरल फिक्स जो मेरे लिए काम करता है। सर्वर / सर्वरोबिज एक्सप्लोरर में मिलने वाले किसी भी डेटाबेस संदर्भ और कनेक्शन को हटाने के बाद, App_Data फ़ोल्डर पर राइट क्लिक करें (मेरे लिए एप्लिकेशन के भीतर कोई ऑब्जेक्ट नहीं दिखा) और खुले का चयन करें। एक बार खुला सभी डेटाबेस / आदि डाल दिया। एक बैकअप फ़ोल्डर में फाइलें या यदि आपके पास हिम्मत है तो बस उन्हें हटा दें। अपना एप्लिकेशन चलाएं और इसे खरोंच से सब कुछ फिर से बनाना चाहिए।


0

मेरा समाधान इसके लिए सबसे उपयुक्त है :
- अपनी mdf फ़ाइल को हटा दिया गया
- अपने db को फिर से बनाना चाहते हैं।

अपने डेटाबेस को फिर से बनाने के लिए आपको Visual Studio का उपयोग करके कनेक्शन जोड़ने की आवश्यकता है।

चरण 1 : सर्वर एक्सप्लोरर पर जाएं नया कनेक्शन जोड़ें (या ऐड डीबी आइकन देखें)।

चरण 2 : Datasource को Microsoft SQL Server डेटाबेस फ़ाइल में बदलें ।

चरण 3 : डेटाबेस फ़ाइल नाम क्षेत्र में अपनी इच्छानुसार कोई भी डेटाबेस नाम जोड़ें । (अधिमानतः वही नाम जो आपके पास web.config AttachDbFilename विशेषता में है)

चरण 4 : ब्राउज़ करें पर क्लिक करें और उस जगह पर नेविगेट करें जहां आप इसे स्थित होना पसंद करेंगे।

चरण 5 : पैकेज प्रबंधक कंसोल रन कमांड मेंupdate-database

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