एंटिटी फ्रेमवर्क - स्टार्ट ओवर - पूर्ववत / रोलबैक सभी माइग्रेशन


168

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

उदा) PM> Disable-MigrationsयाRollback-Migrations

मैं एक मूल माइग्रेशन चरण (अर्थात InitialSchemaलक्ष्य जैसा कुछ ) के लिए "अपडेट" नहीं करना चाहता, क्योंकि मैं इसे अब और नहीं खोज सकता।

जवाबों:


358

आप उपयोग करके किसी भी माइग्रेशन को रोलबैक कर सकते हैं:

Update-Database -TargetMigration:"MigrationName"

यदि आप उन सभी माइग्रेशन को रोलबैक करना चाहते हैं जो आप उपयोग कर सकते हैं:

Update-Database -TargetMigration:0

या उसके बराबर:

Update-Database -TargetMigration:$InitialDatabase 

कुछ मामलों में आप डेटाबेस और सभी माइग्रेशन क्लासेस को भी हटा सकते हैं।


6
हमेशा की तरह, आप सबसे अच्छे हैं।
drzaus

2
मुझे समझ नहीं आ रहा है, ओपी विशेष रूप से कहता है कि "मैं मूल माइग्रेशन स्टेप (" कुछ ऐसा नहीं है कि एक शुरुआती सीसेमा लक्ष्य) को "अपडेट" करना चाहता हूं क्योंकि मैं इसे अब और नहीं ढूंढ सकता। " यह उत्तर वह कैसे चाहता है जो वह चाहता है? मैं जो होने की उम्मीद कर रहा था, वह यह था कि मैं एक ऐसे राज्य में रहूंगा जहां मुझे enable-migrationsफिर से होना है। ये स्पष्ट रूप से सहायक होते हैं, लेकिन क्या वे पूरा करते हैं कि ओपी क्या मांग रहा है? (कृपया जवाब न दें "ठीक है, उन्होंने जवाब स्वीकार कर लिया। मैं इसे समझने की कोशिश कर रहा हूं, यह स्मार्टनेस नहीं है)।
माइकल ब्लैकबर्न

@MichaelBlackburn: यदि आप enable-migrationsफिर से चलाना चाहते हैं और आप खरोंच से डेटाबेस विकसित कर रहे हैं, तो आपको अंतिम वाक्य का पालन करने की आवश्यकता है: डेटाबेस और सभी माइग्रेशन संबंधित कोड हटाएं। यदि आपने मौजूदा डेटाबेस के साथ माइग्रेशन का उपयोग करना शुरू किया है तो आपको पहले दूसरे या तीसरे कमांड का उपयोग करके सभी माइग्रेशन को वापस करना होगा, फिर MigrationHistoryटेबल और सभी माइग्रेशन संबंधित कोड को हटा दें । यह आपको शुरुआती स्थिति में ले जाना चाहिए। आप बैकअप से शुरुआती डेटाबेस (माइग्रेशन का उपयोग करने से पहले) भी प्राप्त कर सकते हैं और माइग्रेशन संबंधी सभी कोड हटा सकते हैं।
लादिस्लाव मृका

4
@MichaelBlackburn: मेरा क्या मतलब था कि अन्य सभी समाधान जो मैंने आपको बताए हैं कि आप अपने पहले नामित माइग्रेशन को वापस अपडेट करने के लिए कहेंगे , लेकिन मेरी समस्या यह थी कि अपडेट करने के लिए एक प्रारंभिक स्वच्छ माइग्रेशन नहीं था (बैक) - मैं बस के लिए विधि की परवाह किए बिना सभी पलायन से छुटकारा चाहते थे। इसलिए इस जवाब ने मेरी चिंता को दूर कर दिया-TargetMigration:0
drzaus


8

स्पष्ट होने के लिए, यदि LocalDb का उपयोग करते समय, जब आप स्क्रैच से शुरू करना चाहते हैं तो डेटाबेस एक्सप्लोरर के माध्यम से डेटाबेस को हटा दें और फिर enable-migrations -forceपैकेज मैनेजर कंसोल में टाइप करें। डेटाबेस को App_Data फ़ोल्डर के माध्यम से न हटाएं या आपके पास निम्न समस्या होगी


2
ऐसा करते समय सावधान रहें क्योंकि यह बिना चेतावनी के आपके माइग्रेशन \ configuration.cs को अधिलेखित कर देगा!
cgatian

चेतावनी के लिए धन्यवाद, मैंने एक तरह से कोड को पहली बार गिरा दिया, थोड़ी देर के बाद, अपने सभी कोड को एक बार, स्थान पर रखने पर अच्छा लगा, आपके डेटाबेस के लिए स्रोत नियंत्रण प्रति सेगमेंट में है, लेकिन मुझे कोई अन्य बड़ा लाभ नहीं मिला और पहले डेटाबेस में वापस आ गया। मैं सभी डेल्टास को ट्रैक करने के लिए रेड गेट एसक्यूएल तुलना का उपयोग करता हूं।
ब्रायन ओगडेन


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