Hasilkan skrip SQL lengkap dari EF 5 Code First Migrations

145

Bagaimana cara menggunakan Entity Framework 5 Code Migration First untuk membuat skrip database lengkap dari keadaan awal (kosong) ke migrasi terbaru?

Posting blog di MSDN Blog menyarankan untuk melakukan ini, tetapi tampaknya membuat skrip kosong:

Update-Database -Script -SourceMigration: $InitialDatabase
Matt Wilson
sumber

Jawaban:

286

API tampaknya telah berubah (atau setidaknya, itu tidak berfungsi untuk saya).

Menjalankan yang berikut ini di Package Manager Console berfungsi seperti yang diharapkan:

Update-Database -Script -SourceMigration:0
Matt Wilson
sumber
14
Saya menyadari ini adalah jawaban yang benar, tetapi bagaimana Anda menemukan bahwa 0 berfungsi ketika parameter biasanya berupa string ?!
Dave R
27
Hanya coba-coba setelah mencoba segala yang dapat saya pikirkan untuk mengelabui agar berhasil :)
Matt Wilson
1
Apakah ini membuat salinan database yang tepat? Termasuk isi tabel?
Multitut
2
@Multitut: tidak hanya akan melakukan struktur.
Martin Clarke
6
Hanya dalam kasus seseorang mencari cara untuk melakukan hal ini di EfCore dan berakhir di sini seperti saya, perintahnya adalah: dotnet ef migrations script. Lebih lanjut tentang dokumentasi: docs.microsoft.com/en-us/ef/core/managing-schemas/migrations/…
Rafael Miceli
14

Bagi siapa pun yang menggunakan inti kerangka entitas, berakhir di sini. Ini adalah bagaimana Anda melakukannya.

# Powershell / Package manager console
Script-Migration

# Cli 
dotnet ef migrations script

Anda dapat menggunakan -Fromdan -Toparameter untuk menghasilkan skrip pembaruan untuk memperbarui database ke versi tertentu.

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

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

Ada beberapa opsi untuk perintah ini.

The dari migrasi harus migrasi terakhir diterapkan ke database sebelum menjalankan script. Jika tidak ada migrasi yang diterapkan, tentukan 0(ini adalah default).

The untuk migrasi adalah migrasi terakhir yang akan diterapkan ke database setelah menjalankan script. Ini default untuk migrasi terakhir di proyek Anda.

Sebuah idempoten naskah opsional dapat dihasilkan. Skrip ini hanya berlaku migrasi jika belum diterapkan ke database. Ini berguna jika Anda tidak tahu persis apa migrasi terakhir yang diterapkan ke database itu atau jika Anda menggunakan beberapa database yang masing-masing mungkin berada pada migrasi yang berbeda.

Justin Lessard
sumber
Ini bekerja pada satu titik. Setelah Anda mulai mengubah nama kolom, ia akan mulai melempar kesalahan, membuat DacPac adalah solusi yang lebih baik. Terutama ketika Anda mulai menggunakan Pipeline dalam CI / CD
Nick Turner
8

Untuk menambah jawaban Matt wilson, saya memiliki banyak kelas entitas kode-pertama tetapi tidak ada database karena saya belum mengambil cadangan. Jadi saya melakukan hal berikut pada proyek Entity Framework saya:

Buka konsol Package Manager di Visual Studio dan ketikkan yang berikut:

Enable-Migrations

Add-Migration

Beri nama migrasi Anda seperti 'Initial' dan kemudian buat migrasi. Terakhir ketikkan yang berikut:

Update-Database

Update-Database -Script -SourceMigration:0

Perintah terakhir akan membuat tabel database Anda dari kelas entitas Anda (asalkan kelas entitas Anda terbentuk dengan baik).

Tahir Khalid
sumber