EF 5 कोड प्रथम माइग्रेशन से पूर्ण SQL स्क्रिप्ट उत्पन्न करें


145

मैं आरंभिक (रिक्त) स्थिति से नवीनतम माइग्रेशन तक पूर्ण डेटाबेस स्क्रिप्ट बनाने के लिए एंटिटी फ्रेमवर्क 5 कोड फर्स्ट माइग्रेशन का उपयोग कैसे करूं?

MSDN ब्लॉग पर ब्लॉग पोस्ट ऐसा करने का सुझाव देता है, लेकिन यह एक खाली स्क्रिप्ट बनाने के लिए लगता है:

Update-Database -Script -SourceMigration: $InitialDatabase

जवाबों:


286

एपीआई बदला हुआ प्रतीत होता है (या कम से कम, यह मेरे लिए काम नहीं करता है)।

पैकेज प्रबंधक कंसोल में निम्न को चलाना उम्मीद के मुताबिक काम करता है:

Update-Database -Script -SourceMigration:0

14
मुझे एहसास है कि यह सही उत्तर है, लेकिन पृथ्वी पर आपको कैसे पता चला कि 0 काम करता है जब पैरामीटर सामान्य रूप से एक स्ट्रिंग है ?!
डेव आर

27
बस परीक्षण और त्रुटि वास्तव में सब कुछ करने की कोशिश करने के बाद मैं इसे काम करने के बारे में सोच सकता हूं :)
मैट विल्सन

1
क्या यह डेटाबेस की एक सटीक प्रतिलिपि बनाता है? तालिका सामग्री सहित?
गुणा करें

2
@ मूल: नहीं, यह केवल संरचना ही करेगा।
मार्टिन क्लार्क

6
शायद ज़रुरत पड़े कोई कैसे EfCore में यह कर और यहाँ मेरे जैसे समाप्त करने के लिए देख रहा है, आदेश है: dotnet ef migrations script। प्रलेखन पर अधिक: docs.microsoft.com/en-us/ef/core/managing-schemas/migrations/…
राफेल

13

इकाई फ्रेमवर्क कोर का उपयोग करने वाले किसी भी व्यक्ति के लिए यहां समाप्त होता है। इसे आपको इसी तरह करना होगा।

# Powershell / Package manager console
Script-Migration

# Cli 
dotnet ef migrations script

आप किसी विशेष संस्करण में डेटाबेस को अपडेट करने के लिए अद्यतन स्क्रिप्ट उत्पन्न करने के लिए -Fromऔर -Toपैरामीटर का उपयोग कर सकते हैं ।

Script-Migration -From 20190101011200_Initial-Migration -To 20190101021200_Migration-2

https://docs.microsoft.com/en-us/ef/core/managing-schemas/migrations/#generate-sql-scripts

इस कमांड के कई विकल्प हैं।

से पलायन पिछले माइग्रेशन स्क्रिप्ट चलाने से पहले डेटाबेस के लिए लागू किया जाना चाहिए। यदि कोई माइग्रेशन लागू नहीं किया गया है, तो निर्दिष्ट करें 0(यह डिफ़ॉल्ट है)।

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

एक idempotent स्क्रिप्ट वैकल्पिक रूप से उत्पन्न किया जा सकता। यह स्क्रिप्ट केवल तभी माइग्रेशन लागू करती है जब वे डेटाबेस पर पहले से लागू नहीं हुई हों। यह तब उपयोगी होता है जब आपको यह नहीं पता होता है कि डेटाबेस में लागू किया गया अंतिम माइग्रेशन क्या था या यदि आप एक से अधिक डेटाबेस में एक से अधिक माइग्रेशन के लिए एक से अधिक डेटाबेस परिनियोजित कर रहे हैं।


यह एक बिंदु पर काम करता है। एक बार जब आप कॉलम के नाम बदलना शुरू कर देंगे, तो यह त्रुटियों को फेंकना शुरू कर देगा, DacPac बनाना एक बेहतर समाधान है। खासकर जब आप CI / CD में पाइपलाइन का उपयोग शुरू करते हैं
निक टर्नर

8

मैट विल्सन के उत्तर में जोड़ने के लिए मेरे पास कोड-प्रथम इकाई वर्गों का एक समूह था, लेकिन कोई डेटाबेस नहीं था क्योंकि मैंने बैकअप नहीं लिया था। इसलिए मैंने अपनी इकाई रूपरेखा परियोजना पर निम्नलिखित कार्य किया:

Visual Studio में पैकेज मैनेजर कंसोल खोलें और निम्न टाइप करें:

Enable-Migrations

Add-Migration

अपने माइग्रेशन को 'आरंभिक' जैसे नाम दें और फिर माइग्रेशन बनाएं। अंत में निम्न टाइप करें:

Update-Database

Update-Database -Script -SourceMigration:0

अंतिम कमांड आपके इकाई वर्गों से आपके डेटाबेस टेबल बनाएगी (बशर्ते आपकी इकाई कक्षाएं अच्छी तरह से बनाई गई हों)।

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