EF 5 Kod İlk Geçişlerinden tam SQL komut dosyası oluşturun


145

İlk (boş) durumdan en son geçişe kadar tam bir veritabanı komut dosyası oluşturmak için Entity Framework 5 Kodu İlk Geçişleri'ni nasıl kullanabilirim?

MSDN Blog'daki blog yazısı bunu yapmanızı önerir, ancak boş bir komut dosyası oluşturuyor gibi görünüyor:

Update-Database -Script -SourceMigration: $InitialDatabase

Yanıtlar:


287

API değişmiş gibi görünüyor (veya en azından benim için çalışmıyor).

Paket Yöneticisi Konsolu'nda aşağıdakileri çalıştırmak beklendiği gibi çalışır:

Update-Database -Script -SourceMigration:0

14
Bunun doğru cevap olduğunu anlıyorum, ancak parametre normalde bir dize olduğunda 0'ın nasıl çalıştığını keşfettiniz ?!
Dave R

27
Sadece deneme ve hata gerçekten işe kandırmak için aklınıza gelebilecek her şeyi denedikten sonra :)
Matt Wilson

1
Bu veritabanının tam bir kopyasını oluşturuyor mu? Tablo içeriği dahil mi?
15'de Multitut

2
@Multitut: hayır sadece yapıyı yapacak.
Martin Clarke

6
Her ihtimale karşı birisi EfCore bunu ve burada benim gibi sona erdi nasıl bakıyor, komut: dotnet ef migrations script. Belgeler hakkında daha fazla bilgi için: docs.microsoft.com/en-us/ef/core/managing-schemas/migrations/…
Rafael Miceli

14

Varlık çerçevesi çekirdeğini kullanan herkes için burada sona eriyor. Bunu böyle yaparsınız.

# Powershell / Package manager console
Script-Migration

# Cli 
dotnet ef migrations script

Bir veritabanını belirli bir sürüme güncellemek üzere bir güncelleme komut dosyası oluşturmak için -Fromve -Toparametresini kullanabilirsiniz .

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

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

Bu komutun birkaç seçeneği vardır.

Dan göç komut dosyasını çalıştırmadan önce veritabanına uygulanan son göç olmalıdır. Hiçbir taşıma uygulanmadıysa, belirtin 0(bu varsayılan ayardır).

İçin göç komut çalıştırdıktan sonra veritabanına uygulanacak son göç. Bu, varsayılan olarak projenizdeki son taşıma işlemidir.

İsteğe bağlı olarak bir idempotent komut dosyası oluşturulabilir. Bu komut dosyası, yalnızca veritabanına henüz uygulanmadıysa taşıma işlemlerini uygular. Bu, veritabanına uygulanan son geçişin tam olarak ne olduğunu bilmiyorsanız veya her biri farklı bir geçişte olabilecek birden çok veritabanına dağıtıyorsanız yararlıdır.


Bu bir noktaya kadar çalışır. Sütun adlarını değiştirmeye başladığınızda hata atmaya başlayacak, DacPac oluşturmak daha iyi bir çözümdür. Özellikle CI / CD'de Boru Hatları kullanmaya başladığınızda
Nick Turner

8

Matt Wilson'ın cevabına eklemek için bir grup kod birinci varlık sınıflarım vardı ama yedek almadığım için veritabanı yok. Bu yüzden Entity Framework projemde aşağıdakileri yaptım:

Visual Studio'da Package Manager konsolunu açın ve aşağıdakileri yazın:

Enable-Migrations

Add-Migration

Taşıma işleminize 'Başlangıç' gibi bir ad verin ve taşıma işlemini oluşturun. Son olarak aşağıdakileri yazın:

Update-Database

Update-Database -Script -SourceMigration:0

Son komut, veritabanı tablolarınızı varlık sınıflarınızdan oluşturur (varlık sınıflarınızın iyi biçimlendirilmesi şartıyla).

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.