मौजूदा ईएफ कोड फर्स्ट डेटाबेस को खरोंच से कैसे हटाएं और फिर से बनाएँ


84

मैं वीएस 2012 में ईएफ 5 के साथ ईएफ कोड फर्स्ट का उपयोग कर रहा हूं। मैं पीएम update-databaseकमांड का उपयोग करता हूं और नमूना डेटा के साथ कुछ तालिकाओं को भरने के लिए मेरे पास एक सरल बीज विधि है।

मैं अपने x.mdb को हटाना और फिर से बनाना चाहूंगा। अद्यतन इतिहास सिंक से बाहर लगता है। अगर मैं अपने संदर्भ में अपने सभी डीबीएससेट को टिप्पणी करता हूं, तो update-databaseबिना किसी त्रुटि के चलता है लेकिन डीबी में कुछ तालिकाओं को छोड़ देता है। जैसा कि DB में मेरे पास कोई मूल्यवान डेटा नहीं है, यह सभी चीज़ों को रीसेट करने के लिए सबसे सरल लगता है।

मैं यह कैसे हासिल कर सकता हूं?

जवाबों:


110

अगर मैं इसे सही समझ रहा हूँ ...

यदि आप चाहते हैं start clean:

1) अपने डीबी को मैन्युअल रूप से हटाएं - जहां कहीं भी हो (मैं मान रहा हूं कि आपका कनेक्शन सॉर्ट किया गया है), या इसे खाली करें, लेकिन आसान / सुरक्षित यह सब एक साथ डिलीट करना है - जैसा कि system __MigrationHistoryटेबल है - आपको उस हटाए गए की भी आवश्यकता है।

2) सभी को हटा देंmigration files - जो निम्न हैं Migrations- और नाम जैसे नंबर आदि - उन सभी को हटा दें,

3) माइग्रेशन (और बाकी) युक्त अपनी परियोजना का पुनर्निर्माण करें - और सुनिश्चित करें कि आपकी परियोजना स्वचालित रूप से बनाने के लिए (कॉन्फ़िगरेशन) सेट है (कभी-कभी समस्याएँ पैदा हो सकती हैं - लेकिन आपके लिए संभावना नहीं)

4) Add-Migration Initialफिर से चलाएं - फिरUpdate-Database


6
तो डेटाबेस को स्वयं हटाने के लिए ef माइग्रेशन प्राप्त करने के लिए कोई कमांड नहीं है?
cjb110

1
... जहाँ तक मुझे पता है (नवीनतम संस्करणों के बारे में निश्चित नहीं) - EF / माइग्रेशन 'Db' बनाने में अच्छे होते हैं जब आप कोई Db, और तब 'अपडेट' नहीं करते हैं क्योंकि आप कोड बदलते हैं। लेकिन जब आपको कुछ व्यवस्थापक रखरखाव करने की आवश्यकता होती है तो आपको अपने हाथों को गंदा करना
पड़ता है

1
मुझे SQL सर्वर ऑब्जेक्ट एक्सप्लोरर से डेटाबेस को भी निकालना पड़ा।
स्टीवन ज्यूरिस

मुझे इसे काम करने के लिए अद्यतन-डेटाबेस को चलाने से पहले दृश्य स्टूडियो को पुनरारंभ करना पड़ा। पहली बार नई संरचनाओं के निर्माण के दौरान उत्पन्न एक त्रुटि की कोशिश करें, हालांकि ऐड-माइग्रेशन बिना किसी रिपोर्ट किए गए मुद्दों के माध्यम से चला गया।
पैट्रिक

2
@lpacheco यदि आपके पास एक उत्पादन डेटाबेस है जिसमें डेटा है जिसे आप तब नष्ट नहीं करना चाहते हैं, उह, मैं सम्मानपूर्वक सुझाव देता हूं कि "कैसे हटाएं ... एक मौजूदा ... डेटाबेस" नामक एक प्रश्न आपके लिए बिल्कुल सही प्रश्न नहीं था। ।
मार्क अमेरी

60

यदि आपने कमांड का उपयोग करके अपने माइग्रेशन को बनाने के लिए सही तरीके से काम किया है, Add-Migration "Name_Of_Migration"तो आप एक क्लीन स्टार्ट (रीसेट, डेटा की हानि के साथ, निश्चित रूप से ) प्राप्त करने के लिए निम्न कार्य कर सकते हैं :

  1. Update-database -TargetMigration:0

    आम तौर पर आपका डीबी अब खाली है क्योंकि डाउन विधियों को निष्पादित किया गया था।

  2. Update-database

    यह आपके DB को आपके वर्तमान प्रवास में पुनः बनाएगा


1
अपडेट-डेटाबेस -टार्गेट माइग्रेशन: सब कुछ हटाने के लिए 0 -f (फोर्स) फ्लैग की जरूरत है वरना इसे संभावित डेटा लॉस कहा जाएगा। कमांड होनी चाहिए: अपडेट-डेटाबेस -टार्गेट माइग्रेशन: 0 -f
Tascalator

@ टेश्लेटर, मैंने अभी-अभी यह बिना कोशिश किया था और संभावित डेटा हानि के बारे में कोई चेतावनी नहीं थी। EF 6.1.2 का उपयोग करना, और उन तालिकाओं में डेटा था जिन्हें गिरा दिया गया था।
jk7

एकदम सही जवाब। जल्द और आसान! Thnx
sapatelbaps

EF कोर डॉक्स के अनुसार, सही पैरामीटर नाम है -Target (EF Core 1.1 के लिए) या माइग्रेशन (EF Core 2.0 के लिए)
हार्वे डारवे

32

पैकेज प्रबंधक कंसोल से ड्रॉप, क्रिएट और सीड करने के लिए सिंगल लाइनर:

update-database -TargetMigration:0 | update-database -force

Kaboom।


5
एक ही चरण को दो बार निष्पादित करने की आवश्यकता क्यों होगी? "update-database
-force

बस एक छोटा सा नोटिस: "AutomaticMigrationDataLossAllowed = true;" कन्फेक्शन के भीतर आवश्यक है।
यूनिकको

2
EF Core में बराबर सिंटैक्स होता है Update-Database 0। भले ही, यह ओपी के मामले के लिए अच्छा नहीं है, जहां "अपडेट इतिहास सिंक से बाहर लगता है" ; यह दृष्टिकोण डेटाबेस पर लागू होने वाले प्रत्येक माइग्रेशन के लिए "डाउन" माइग्रेशन चलाकर काम करता है, इसलिए यदि आपने पहले से लागू किया गया माइग्रेशन हटा दिया है तो यह विफल हो जाएगा (और यह उसी तरह विफल हो सकता है यदि आपने माइग्रेशन को संशोधित किया है इसे लगाना)। स्वीकार किए जाते हैं जवाब और अधिक मजबूत है। -1 उसके लिए, और अस्पष्टीकृत पुनरावृत्ति update-database -force
मार्क एमी

1
@SwissCoder - आपको दो बार एक ही चरण की आवश्यकता नहीं है (कम से कम, मैं नहीं था)। मुझे लगता है कि एक टाइपो था।
एड ग्राहम

1
@SwissCoder ईमानदारी से मैंने गौर नहीं किया है, कोई अपराध का इरादा नहीं है
19

31

EntityFrameworkCore के लिए आप निम्नलिखित का उपयोग कर सकते हैं:

Update-Database -Migration 0

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

Remove-Migration

अपने प्रवास को निकालने के लिए। अंत में आप अपने माइग्रेशन को फिर से बना सकते हैं और इसे डेटाबेस पर लागू कर सकते हैं।

Add-Migration Initialize
Update-Database

EFCore v2.1.0 पर परीक्षण किया गया


2
एक जादू की तरह काम करता है!
पावेलनेक्स

4

कैसा रहेगा ..

static void Main(string[] args)
{
    Database.SetInitializer(new DropCreateDatabaseIfModelChanges<ExampleContext>());  
    // C
    // o
    // d
    // i
    // n
    // g
}

मैंने इसे प्रोग्रामिंग एंटिटी फ्रेमवर्क: कोड फर्स्ट , पृष्ठ 28 प्रथम संस्करण से उठाया ।


11
यह एक अच्छी ईद नहीं है। संभावना है कि कर रहे हैं इस कोड को उत्पादन तक पहुंच सकता है और आप अपने ग्राहकों के साथ काफी सिरदर्द होने पहुंच जाएंगे कि ...
एमाडियो गेलार्डो

यह केवल डेटाबेस को गिराता है यदि मॉडल बदलता है, तो ओपी इसे बिना मॉडल परिवर्तन के भी छोड़ना चाहता है।
क्वाटिक

1

यदि आपने इस ट्यूटोरियल के बाद अपना डेटाबेस बनाया है: https://msdn.microsoft.com/en-au/data/jj193542.aspx

... तो यह काम कर सकता है:

  1. अपनी परियोजना निर्देशिका में सभी .mdfऔर .ldfफ़ाइलें हटाएँ
  2. देखने / SQL सर्वर ऑब्जेक्ट एक्सप्लोरर पर जाएं और (localdb) \ v11.0 सबनोड से डेटाबेस को हटा दें। Https://stackoverflow.com/a/15832184/2279059 भी देखें

0

ये उपाय करें:

  1. उन ऑब्जेक्ट को हटा दें जिन्हें संदर्भ // से हटा दिया जाना चाहिए Dbset<Item> Items{get;set;} और नुगेट कंसोल में ये कमांड चलाएं
  2. ऐड-माइग्रेशन [संदर्भनाम]
  3. अद्यतन-डेटाबेस -verbose

यह तालिका को छोड़ देगा जो कि प्रसंग में मौजूद नहीं है, लेकिन पहले से ही डेटाबेस में बनाई गई है



0

मुझे उत्तर को अपडेट करने में मदद करें क्योंकि नए उपयोगकर्ता इसे उपयोगी पाएंगे। मेरा मानना ​​है कि उद्देश्य स्वयं डेटाबेस को हटाना और EF कोड प्रथम दृष्टिकोण का उपयोग करके इसे फिर से बनाना है। 1. अपने प्रोजेक्ट को विजुअल स्टूडियो में ".Sln" एक्सटेंशन का उपयोग करके खोलें। 2. सर्वर सर्वर एक्सप्लोरर (यह बाईं ओर बार-बार होता है) 3. SQL सर्वर ऑब्जेक्ट एक्सप्लोरर का चयन करें। 4. आप जिस डेटाबेस को हटाना चाहते हैं, उसे किसी भी स्थानीय डीबीडी के तहत सूचीबद्ध किया जाएगा। इसे राइट-क्लिक करें और हटाएं चुनें।


ऐसा लगता है जैसे ओपी कमांड लाइन पर एक कमांड की तलाश कर रहा था, क्योंकि उन्होंने स्पष्ट रूप से उल्लेख किया था update-database, और जब से उन्होंने बीजारोपण का उल्लेख किया है , मुझे लगता है कि वे परीक्षण के लिए एक स्वचालित समाधान की तलाश कर रहे थे। इसलिए आपका UI समाधान संभवतः वे नहीं हैं जो वे खोज रहे हैं।
valkn0t

0

डेटाबेस को छोड़ने या मौजूदा डेटाबेस को अपडेट करने के कई तरीके हैं, बस आप पिछले माइग्रेशन पर जा सकते हैं।

dotnet ef database update previousMigraionName    

लेकिन कुछ डेटाबेस में सीमाएं होती हैं जैसे कि संबंध बनाने के बाद संशोधित करने की अनुमति नहीं है, इसका मतलब है कि आपने एफई कोर डेटाबेस प्रदाताओं से कॉलम ड्रॉप करने की अनुमति नहीं दी है, लेकिन अक्सर एफई कोर ड्रॉप डेटाबेस में अनुमति दी जाती है। तो आप ड्रॉप कमांड का उपयोग करके डीबी को छोड़ सकते हैं और फिर आप पिछले माइग्रेशन का फिर से उपयोग करते हैं।

dotnet ef database drop
PMC command 
PM> drop-database

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


-2

चूँकि यह प्रश्न नए EF Core उपयोगकर्ताओं द्वारा किसी दिन क्लिक किया जाने वाला है और मुझे शीर्ष उत्तर कुछ अनावश्यक रूप से विनाशकारी लगते हैं, मैं आपको "ताज़ा" शुरू करने का एक रास्ता दिखाऊंगा। खबरदार, यह आपके सभी डेटा को हटा देता है।

  1. अपने MS SQL सर्वर पर सभी तालिकाओं को हटा दें। __EFMigrations तालिका भी हटाएं।
  2. प्रकार dotnet ef database update
  3. EF Core अब आपके नवीनतम प्रवासन तक डेटाबेस को शून्य से फिर से बनाएगा।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.