क्या मैं EF कोड और .net कोर के साथ एक माइग्रेशन की स्क्रिप्ट उत्पन्न कर सकता हूं


88

मैं .Net कोर के साथ एक एमवीसी एप्लिकेशन बना रहा हूं और मुझे माइग्रेशन की स्क्रिप्ट तैयार करनी होगी।

EF6 के साथ मैंने कमांड चलाया

update-database -script

लेकिन जब मैं .net कोर के साथ ऐसा करने की कोशिश करता हूं तो अगला अपवाद फेंक दिया जाता है:

अद्यतन-डेटाबेस: एक पैरामीटर नहीं पाया जा सकता है जो पैरामीटर नाम 'स्क्रिप्ट' से मेल खाता है

क्या आप जानते हैं कि क्या EF Core के लिए कोई समान है?

जवाबों:


129

EF प्रलेखन के अनुसार आप Script-Migrationकमांड का उपयोग कर सकते हैं ।

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

Script-Migration -From <PreviousMigration> -To <LastMigration>

डॉक्स की जांच करना सुनिश्चित करें, कमांड के लिए कुछ और विकल्प हैं।


1
स्क्रिप्ट-माइग्रेशन टूल डाउनग्रेड के लिए काम नहीं करता है (जब माइग्रेशन माइग्रेशन से पुराना होता है)। 'पूर्ववत' स्क्रिप्ट बनाने के बारे में कोई विचार?
नूलियस

1
@ आप इसे कॉल नहीं करना चाहते हैं, या इसे इसके "पूर्ववत करें" की तरह देखें, आपको बस अपने कोड पर अपने पूर्ववत करने की आवश्यकता है और फिर डीबी को अपडेट करें और नवीनतम स्क्रिप्ट प्राप्त करें ...
Haithem KAROUI

1
हमारे पास एक तैनाती सर्वर है जो db-migrations का भी प्रबंधन करता है। उदाहरण के लिए: जब एक तैनाती रोलबैक हो जाती है, तो भी डेटाबेस को पिछली स्थिति में डाउनग्रेड किया जाना चाहिए। डीबी-माइग्रेशन का प्रबंधन करने वाले बिल्ड कदम को एक 'अप' और 'डाउन' स्क्रिप्ट की आवश्यकता होती है। हमें पता चला है कि स्क्रिप्ट-माइग्रेशन तब भी काम करता है जब किसी पुराने को माइग्रेशन से माइग्रेट करने के लिए निर्दिष्ट करता है। हालाँकि, किसी को उस माइग्रेशन पर सेट करना चाहिए, जो आपके द्वारा वास्तव में माइग्रेट करना चाहते हैं। इसके अलावा, जब नवीनतम माइग्रेशन के लिए 'डाउन' स्क्रिप्ट उत्पन्न करने की कोशिश की जा रही है, तो किसी को माइग्रेशन पैरामीटर के लिए 'ZZZZZZ' (या समान) का उपयोग करना चाहिए।
नौलियस

4
क्या होगा अगर मैं पहले प्रवास के लिए स्क्रिप्ट उत्पन्न करने की कोशिश कर रहा हूं । कोई पिछला
माइग्रेशन

2
@tchelidze प्रारंभिक माइग्रेशन को स्क्रिप्ट करने के लिए, -From पैरामीटर को 0. पर सेट करें। जैसे स्क्रिप्ट-माइग्रेशन
-From

20

स्क्रिप्ट बनाने के लिए आप डॉटनेट कोर क्लि का उपयोग कर सकते हैं

dotnet ef migrations script 

इसके अलावा आप इसे नए पॉवर शेल out-fileकमांड के साथ फाइल करने के लिए रख सकते हैं ।

dotnet ef migrations script | out-file ./script.sql

2
अच्छी टिप, या सीएमडी में: dotnet ef माइग्रेशन स्क्रिप्ट> script.sql
Tore Aurstad

13
dotnet ef migrations script --help

Usage: dotnet ef migrations script [arguments] [options]

Arguments:
  <FROM>  The starting migration. Defaults to '0' (the initial database).
  <TO>    The ending migration. Defaults to the last migration.

Options:
  -o|--output <FILE>                     The file to write the result to.
  -i|--idempotent                        Generate a script that can be used on a database at any migration.
  -c|--context <DBCONTEXT>               The DbContext to use.
  -p|--project <PROJECT>                 The project to use.
  -s|--startup-project <PROJECT>         The startup project to use.
  --framework <FRAMEWORK>                The target framework.
  --configuration <CONFIGURATION>        The configuration to use.
  --runtime <RUNTIME_IDENTIFIER>         The runtime to use.
  --msbuildprojectextensionspath <PATH>  The MSBuild project extensions path. Defaults to "obj".
  --no-build                             Don't build the project. Only use this when the build is up-to-date.
  -h|--help                              Show help information
  -v|--verbose                           Show verbose output.
  --no-color                             Don't colorize output.
  --prefix-output                        Prefix output with level.

तो, आप कोशिश कर सकते हैं

dotnet ef migrations script ver1 ver2
dotnet ef migrations script ver1 ver2 -o ./script.sql

यह .Net Core 2.1 में काम करता है


11

आप स्क्रिप्ट-माइग्रेशन के मापदंडों को उल्टा करके माइग्रेशन को रोलबैक करने के लिए एक स्क्रिप्ट भी उत्पन्न कर सकते हैं। उदाहरण के लिए, यदि आपके पास दो माइग्रेशन, BadLatestM माइग्रेशन और GoodPrepretM माइग्रेशन हैं, तो आप निम्न कमांड का उपयोग करके गुडप्रेजेब्रेशन माइग्रेशन पर वापस लौट सकते हैं

Script-Migration BadLatestMigration GoodPreviousMigration 

बाद में खराब माइग्रेशन को हटाने के लिए रिमूव-माइग्रेशन सुनिश्चित करें

Remove-Migration

यह .Net Core 2.2.0 में काम करता है


मैं रोलबैक की तलाश में था और इसने मेरे लिए इसे हल कर दिया। EF Core 3.0 में काम करता है
Sehab

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