Bagikan melalui


Menggunakan migrate.exe

Migrasi Pertama Kode dapat digunakan untuk memperbarui database dari dalam visual studio, tetapi juga dapat dijalankan melalui alat baris perintah migrate.exe. Halaman ini akan memberikan gambaran umum singkat tentang cara menggunakan migrate.exe untuk menjalankan migrasi terhadap database.

Catatan

Artikel ini mengasumsikan Anda tahu cara menggunakan Migrasi Pertama Kode dalam skenario dasar. Jika tidak, Maka Anda harus membaca Migrasi Pertama Kode sebelum melanjutkan.

Salin migrate.exe

Saat Anda menginstal Entity Framework menggunakan NuGet migrate.exe akan berada di dalam folder alat paket yang diunduh. Di <folder> proyek\packages\EntityFramework.<version>\tools

Setelah Anda melakukan migrate.exe, Anda perlu menyalinnya ke lokasi perakitan yang berisi migrasi Anda.

Jika aplikasi Anda menargetkan .NET 4, dan bukan 4.5, maka Anda harus menyalin Redirect.config ke lokasi juga dan mengganti namanya menjadi migrate.exe.config. Ini agar migrate.exe mendapatkan pengalihan pengikatan yang benar untuk dapat menemukan rakitan Kerangka Kerja Entitas.

.NET 4.5 .NET 4.0
.NET 4.5 Files .NET 4.0 Files

Catatan

migrate.exe tidak mendukung rakitan x64.

Setelah Anda memindahkan migrate.exe ke folder yang benar, Anda harus dapat menggunakannya untuk menjalankan migrasi terhadap database. Semua utilitas dirancang untuk dilakukan adalah menjalankan migrasi. Ini tidak dapat menghasilkan migrasi atau membuat skrip SQL.

Lihat opsi

Migrate.exe /?

Di atas akan menampilkan halaman bantuan yang terkait dengan utilitas ini, perhatikan bahwa Anda harus memiliki EntityFramework.dll di lokasi yang sama dengan yang Anda jalankan migrate.exe agar ini berfungsi.

Migrasi ke migrasi terbaru

Migrate.exe MyMvcApplication.dll /startupConfigurationFile="..\\web.config"

Saat menjalankan migrate.exe, satu-satunya parameter wajib adalah rakitan, yang merupakan rakitan yang berisi migrasi yang coba Anda jalankan, tetapi akan menggunakan semua pengaturan berbasis konvensi jika Anda tidak menentukan file konfigurasi.

Bermigrasi ke migrasi tertentu

Migrate.exe MyApp.exe /startupConfigurationFile="MyApp.exe.config" /targetMigration="AddTitle"

Jika Anda ingin menjalankan migrasi hingga migrasi tertentu, maka Anda dapat menentukan nama migrasi. Ini akan menjalankan semua migrasi sebelumnya sesuai kebutuhan hingga sampai ke migrasi yang ditentukan.

Tentukan direktori kerja

Migrate.exe MyApp.exe /startupConfigurationFile="MyApp.exe.config" /startupDirectory="c:\\MyApp"

Jika Anda rakitan memiliki dependensi atau membaca file relatif terhadap direktori kerja maka Anda harus mengatur startupDirectory.

Tentukan konfigurasi migrasi yang akan digunakan

Migrate.exe MyAssembly CustomConfig /startupConfigurationFile="..\\web.config"

Jika Anda memiliki beberapa kelas konfigurasi migrasi, kelas yang mewarisi dari DbMigrationConfiguration, maka Anda perlu menentukan mana yang akan digunakan untuk eksekusi ini. Ini ditentukan dengan menyediakan parameter kedua opsional tanpa sakelar seperti di atas.

Sediakan string koneksi

Migrate.exe BlogDemo.dll /connectionString="Data Source=localhost;Initial Catalog=BlogDemo;Integrated Security=SSPI" /connectionProviderName="System.Data.SqlClient"

Jika Anda ingin menentukan string koneksi di baris perintah, Anda juga harus memberikan nama penyedia. Tidak menentukan nama penyedia akan menyebabkan pengecualian.

Masalah Umum

Pesan kesalahan Solusi
Pengecualian Tidak Tertangani: System.IO.FileLoadException: Tidak dapat memuat file atau rakitan 'EntityFramework, Version=5.0.0.0, Culture=netral, PublicKeyToken=b77a5c561934e089' atau salah satu dependensinya. Definisi manifes assembly yang terletak tidak cocok dengan referensi assembly. (Pengecualian dari HRESULT: 0x80131040) Ini biasanya berarti Bahwa Anda menjalankan aplikasi .NET 4 tanpa file Redirect.config. Anda perlu menyalin Redirect.config ke lokasi yang sama dengan migrate.exe dan mengganti namanya menjadi migrate.exe.config.
Pengecualian Tidak Tertangani: System.IO.FileLoadException: Tidak dapat memuat file atau rakitan 'EntityFramework, Version=4.4.0.0, Culture=netral, PublicKeyToken=b77a5c561934e089' atau salah satu dependensinya. Definisi manifes assembly yang terletak tidak cocok dengan referensi assembly. (Pengecualian dari HRESULT: 0x80131040) Pengecualian ini berarti Anda menjalankan aplikasi .NET 4.5 dengan Redirect.config yang disalin ke lokasi migrate.exe. Jika aplikasi Anda adalah .NET 4.5, Anda tidak perlu memiliki file konfigurasi dengan pengalihan di dalamnya. Hapus file migrate.exe.config.
KESALAHAN: Tidak dapat memperbarui database agar sesuai dengan model saat ini karena ada perubahan yang tertunda dan migrasi otomatis dinonaktifkan. Tulis perubahan model yang tertunda ke migrasi berbasis kode atau aktifkan migrasi otomatis. Atur DbMigrationsConfiguration.AutomaticMigrationsEnabled ke true untuk mengaktifkan migrasi otomatis. Kesalahan ini terjadi jika menjalankan migrasi saat Anda belum membuat migrasi untuk mengatasi perubahan yang dilakukan pada model, dan database tidak cocok dengan model. Menambahkan properti ke kelas model lalu menjalankan migrate.exe tanpa membuat migrasi untuk meningkatkan database adalah contohnya.
KESALAHAN: Jenis tidak diselesaikan untuk anggota 'System.Data.Entity.Migrations.Design.ToolingFacade+UpdateRunner,EntityFramework, Version=5.0.0.0, Culture=netral, PublicKeyToken=b77a5c561934e089'. Kesalahan ini dapat disebabkan oleh menentukan direktori startup yang salah. Ini harus menjadi lokasi migrate.exe
Pengecualian Tidak Tertangani: System.NullReferenceException: Referensi objek tidak diatur ke instans objek.
   di System.Data.Entity.Migrations.Console.Program.Main(String[] args)
Ini dapat disebabkan oleh tidak menentukan parameter yang diperlukan untuk skenario yang Anda gunakan. Misalnya menentukan string koneksi tanpa menentukan nama penyedia.
KESALAHAN: Lebih dari satu jenis konfigurasi migrasi ditemukan di rakitan 'ClassLibrary1'. Tentukan nama yang akan digunakan. Seperti yang dinyatakan kesalahan, ada lebih dari satu kelas konfigurasi dalam rakitan yang diberikan. Anda harus menggunakan sakelar /configurationType untuk menentukan mana yang akan digunakan.
KESALAHAN: Tidak dapat memuat file atau assembly '<assemblyName>' atau salah satu dependensinya. Nama rakitan atau basis kode yang diberikan tidak valid. (Pengecualian dari HRESULT: 0x80131047) Hal ini dapat disebabkan oleh menentukan nama rakitan yang salah atau tidak memiliki
KESALAHAN: Tidak dapat memuat file atau assembly '<assemblyName>' atau salah satu dependensinya. Upaya dilakukan untuk memuat program dengan format yang salah. Ini terjadi jika Anda mencoba menjalankan migrate.exe terhadap aplikasi x64. EF 5.0 ke bawah hanya akan berfungsi pada x86.