Kerangka Entitas - Mulai Lagi - Batalkan / Kembalikan Semua Migrasi

168

Untuk beberapa alasan, migrasi saya tampaknya campur aduk / rusak / apa pun. Saya pada titik di mana saya hanya ingin memulai dari awal, jadi apakah ada cara untuk benar-benar membatalkan semua migrasi, menghapus riwayat, dan menghapus kode migrasi, jadi saya kembali ke titik awal?

misalnya) PM> Disable-MigrationsatauRollback-Migrations

Saya tidak ingin "memperbarui" ke langkah migrasi asli (mis. Sesuatu seperti InitialSchematarget) karena saya tidak dapat menemukannya lagi.

drzaus
sumber

Jawaban:

358

Anda dapat mengembalikan ke migrasi apa pun dengan menggunakan:

Update-Database -TargetMigration:"MigrationName"

Jika Anda ingin mengembalikan semua migrasi, Anda dapat menggunakan:

Update-Database -TargetMigration:0

atau setara:

Update-Database -TargetMigration:$InitialDatabase 

Dalam beberapa kasus, Anda juga dapat menghapus basis data dan semua kelas migrasi.

Ladislav Mrnka
sumber
7
seperti biasa, kamu yang terbaik.
drzaus
2
Saya tidak mengerti, OP secara khusus mengatakan "Saya tidak ingin" memperbarui "ke langkah migrasi asli (yaitu sesuatu seperti target InitialSchema) karena saya tidak dapat menemukannya lagi." Bagaimana jawaban ini melakukan apa yang dia inginkan? Apa yang saya harapkan terjadi adalah bahwa saya akan berada pada kondisi di mana saya harus melakukannya enable-migrationslagi. Ini jelas membantu, tetapi apakah mereka mencapai apa yang diminta OP? (Tolong jangan balas dengan "yah, dia menerima jawabannya." Saya mencoba untuk memahami ini, bukan menjadi sok pintar)
Michael Blackburn
@MichaelBlackburn: Jika Anda ingin menjalankan enable-migrationslagi dan Anda sedang mengembangkan database dari awal, Anda hanya perlu mengikuti kalimat terakhir: hapus database dan semua kode terkait migrasi. Jika Anda mulai menggunakan migrasi dengan database yang sudah ada, Anda harus terlebih dahulu mengembalikan semua migrasi dengan menggunakan perintah kedua atau ketiga, kemudian hapus MigrationHistorytabel dan semua kode terkait migrasi. Ini akan membuat Anda memulai posisi. Anda juga dapat memulai basis data dari cadangan (sebelum menggunakan migrasi) dan menghapus semua kode terkait migrasi.
Ladislav Mrnka
4
@MichaelBlackburn: yang saya maksudkan adalah bahwa semua solusi lain yang saya lihat memberitahu Anda untuk memperbarui kembali ke migrasi bernama pertama Anda , tetapi masalah saya adalah bahwa tidak ada migrasi bersih awal untuk memperbarui (kembali) ke - Saya hanya ingin menyingkirkan semua migrasi, apa pun metodenya. Karena itu jawaban ini ditujukan kepada saya-TargetMigration:0
drzaus
17

Untuk Entity Framework Core:

Update-Database -Migration:0
Remove-Migration
Andrei Karcheuski
sumber
8

Untuk menjadi jelas, jika menggunakan LocalDb, ketika Anda ingin memulai dari awal cukup hapus database melalui Database Explorer dan kemudian ketik enable-migrations -forcePackage Manager Console. Jangan menghapus database melalui folder App_Data atau Anda akan memiliki masalah berikut .

Brian Ogden
sumber
2
Hati-hati saat melakukan ini karena akan menimpa Migrasi \ Configuration.cs Anda tanpa peringatan!
cgatian
Terima kasih atas peringatannya, saya agak menjatuhkan kode dengan cara pertama setelah beberapa saat, senang memiliki semua kode Anda sekaligus, menempatkan, memiliki versi kontrol sumber untuk database Anda sendiri, tetapi saya tidak melihat manfaat besar lainnya dan beralih kembali ke database terlebih dahulu. Saya menggunakan Red Gate Sql Compare untuk melacak semua delta.
Brian Ogden
0

Itu ditulis salah dalam dokumentasi mereka saya kira, bagi saya saya gunakan

Update-Database -Target MigrationName
Sayed Muhammad Idrees
sumber