Önce EF kodu ve .net çekirdeği ile bir geçiş betiği oluşturabilir miyim


88

NET Core ile bir MVC uygulaması oluşturuyorum ve bir geçiş betiğini oluşturmam gerekiyor.

EF6 ile komutu çalıştırdım

update-database -script

ama aynı şeyi .net ile yapmaya çalıştığımda Core bir sonraki istisnayı atıyor:

Update-Database: 'script' parametre adıyla eşleşen bir parametre bulunamıyor

EF Core için bir eşdeğer olup olmadığını biliyor musunuz?

Yanıtlar:


129

Gereğince EF belgelerinde kullanabilirsiniz Script-Migrationkomutu.

Yalnızca tüm geçişleri komut dosyası haline getirmek istiyorsanız, bunu Paket Yöneticisi konsolundan böyle çağırabilirsiniz. Yalnızca son geçişteki değişiklikleri komut dosyası haline getirmek istiyorsanız, bunu şu şekilde adlandırabilirsiniz:

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

Belgeleri kontrol ettiğinizden emin olun, komut için birkaç seçenek daha var.


1
Komut dosyası taşıma aracı, sürüm düşürmeler için çalışmıyor gibi görünmektedir (Hedefe geçiş, Kaynak geçişinden daha eski olduğunda). Bir 'geri alma' komut dosyasının nasıl oluşturulacağına dair bir fikriniz var mı?
Nullius

1
@Nullius olarak adlandırmak istemiyorsanız veya onun bir "undoScript" olduğunu görmek istemiyorsanız, sadece kodunuzu geri almanız ve ardından
Db'yi

1
DB geçişlerini de yöneten bir dağıtım sunucumuz var. Örneğin: bir dağıtım geri alındığında, veritabanı da önceki duruma indirilmelidir. DB geçişlerini yöneten derleme adımı, bir "yukarı" ve "aşağı" komut dosyasına ihtiyaç duyar. Komut dosyası geçişinin, Kaynak geçişinden daha eski bir Hedefe geçişi belirlerken de çalıştığını öğrendik. Ancak, gerçekten taşımak istediğiniz geçişten ÖNCE Kime geçişi ayarlanmalıdır. Ayrıca, en son geçiş için bir 'aşağı' komut dosyası oluşturmaya çalışırken, Kaynak geçiş parametresi için 'ZZZZZZ' (veya benzeri) kullanılmalıdır.
Nullius

4
İlk geçiş için komut dosyası oluşturmaya çalışıyorsam ne olur ? Önceki
Göç

2
@tchelidze için komut ilk göç, -From parametre 0. örn Senaryo-Göç -From 0 olarak ayarlanmış
TallMcPaul

20

Komut dosyası oluşturmak için dotnet core cli kullanabilirsiniz

dotnet ef migrations script 

Ayrıca bunu yeni power shell out-filekomutuyla dosyaya koyabilirsiniz .

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

2
İyi bir ipucu veya CMD'de: dotnet ef migrations script> 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.

yani deneyebilirsin

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

Bu .Net Core 2.1'de çalışır


11

Parametreleri Script-Migration'a çevirerek bir geçişi geri almak için bir komut dosyası da oluşturabilirsiniz. Örneğin, BadLatestMigration ve GoodPreviousMigration olmak üzere iki geçişiniz varsa, aşağıdaki komutu kullanarak GoodPreviousMigration'a geri dönebilirsiniz.

Script-Migration BadLatestMigration GoodPreviousMigration 

Daha sonra, kötü geçişi kaldırmak için Migration'ı Kaldırdığınızdan emin olun

Remove-Migration

Bu .Net Core 2.2.0'da çalışır


Geri dönüşü arıyordum ve bu benim için çözdü. 3.0 EF Çekirdek çalışır
Sehab

5

Bu aynı zamanda yalnızca SQL oluşturur

Update-Database -script -TargetMigration TO -SourceMigration FROM

7
Bu EF5 için doğru, EF6 veya EF çekirdeğinde çalışacağını sanmıyorum
Yuval Perelman
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.