Ketika saya menjalankan PM> Remove-Migration -context BloggingContext
VS2015 dengan proyek ASP.NET Core menggunakan EF Core, saya mendapatkan kesalahan berikut:
System.InvalidOperationException: The migration '20160703192724_MyFirstMigration' has already been applied to the database. Unapply it and try again. If the migration has been applied to other databases, consider reverting its changes using a new migration. at Microsoft.EntityFrameworkCore.Migrations.Design.MigrationsScaffolder.RemoveMigration(String projectDir, String rootNamespace, Boolean force)
at Microsoft.EntityFrameworkCore.Design.MigrationsOperations.RemoveMigration(String contextType, Boolean force)
at Microsoft.EntityFrameworkCore.Tools.Cli.MigrationsRemoveCommand.<>c__DisplayClass0_0.<Configure>b__0()
at Microsoft.Extensions.CommandLineUtils.CommandLineApplication.Execute(String[] args)
at Microsoft.EntityFrameworkCore.Tools.Cli.Program.Main(String[] args)
The migration '20160703192724_MyFirstMigration' has already been applied to the database. Unapply it and try again. If the migration has been applied to other databases, consider reverting its changes using a new migration.
Bagaimana saya bisa menghapusnya? Saya menggunakan rilis terbaru dari ASP.NET Core 1.0, EF Core, dan VS2015 Update 3.
-force
di akhirJawaban:
Menggunakan:
CLI
> dotnet ef database update <previous-migration-name>
Paket Pengelola Konsol
PM> Update-Database <previous-migration-name>
Contoh:
PM> Update-Database MyInitialMigration
Kemudian cobalah untuk menghapus migrasi terakhir.
Menghapus migrasi tanpa pembaruan basis data tidak berfungsi karena Anda menerapkan perubahan pada basis data.
Jika menggunakan PMC, Coba: PM> perbarui-database 0 Ini akan menghapus basis data dan memungkinkan Anda untuk menghapus Snapshot Migrasi pada Solusi Anda
sumber
dotnet ef database update MyFirstMigration --context BloggingContext
yang berhasil. Kemudian saya berlaridotnet ef migrations remove --context BloggingContext
yang memberi saya pesan kesalahan yang sama seperti pada posting sayaMyFirstMigration
. Jika itu adalah migrasi pertama (sesuai namanya) maka Anda dapat menggunakandotnet ef database update 0
untuk mengembalikan (tidak berlaku) semua migrasi dari database. Anda kemudian harus dapat berlaridotnet ef migrations remove
.dotnet ef migrations remove
setelah iniUntuk sepenuhnya menghapus semua migrasi dan memulai dari awal lagi, lakukan hal berikut:
sumber
dotnet ef database update 0
, tetapi menjalankannyadotnet ef migrations remove
setelah itu akan menghapus migrasi default untuk Identity, yang mungkin tidak diinginkan.dotnet ef database update 0
! Saya belum pernah melihat ini disebutkan di mana saja ...The migration '20180618103514_InitialMigration' has already been applied to the database. Revert it and try again. If the migration has been applied to other databases, consider reverting its changes using a new migration.
Anda masih dapat menggunakan
Update-Database
perintah.Namun, menilai dari nama migrasi Anda, saya berasumsi ini adalah migrasi pertama sehingga perintah itu mungkin tidak berfungsi. Anda harus dapat menghapus entri dari
__MigrationHistory
tabel di database Anda dan kemudian jalankanRemove-Migration
perintah itu lagi. Anda juga dapat menghapus file migrasi dan mulai lagi.sumber
Update-Database
dari Package Management Console atau menelepondotnet ef database update
dari command prompt dari direktori proyek.<migration name>
harus merupakan nama dari migrasi Anda ingin kembali ke (yaitu mungkin migrasi sebelum salah satu yang kacau), bukan nama migrasi Anda ingin membatalkan.Untuk membatalkan permohonan migrasi tertentu :
Untuk membatalkan permohonan semua migrasi :
Untuk menghapus migrasi terakhir:
Untuk menghapus semua migrasi:
hapus saja
Migrations
folder.Untuk menghapus beberapa migrasi terakhir (tidak semua):
Tidak ada perintah untuk menghapus banyak migrasi dan kami tidak bisa hanya menghapus beberapa ini
migrations
dan*.designer.cs
file - file mereka karena kami perlu menjaga file snapshot dalam keadaan konsisten. Kami perlu menghapus migrasi satu per satu (lihat diTo remove last migration
atas).Untuk membatalkan permohonan dan menghapus migrasi terakhir:
sumber
unapply
seluruh posting ini. Itu hanya memukul saya itu bukan istilah teknis, itu kataun - apply
Untuk mengembalikan migrasi yang diterapkan terakhir Anda harus (perintah konsol manajer paket):
PM> Update-Database <prior-migration-name>
PM> Remove-Migration
UPD : Langkah kedua tampaknya tidak diperlukan di versi terbaru Visual Studio (2017).
sumber
Remove-Migration
tanpa masalah. Saya tidak yakin apa yang Anda katakan "itu akan diterapkan kembali pada langkah selanjutnya"!dbContext.Database.Migrate()
startup.cs AndaCukup Anda dapat menargetkan Migrasi berdasarkan nilai
Lalu, lanjutkan dan hapus
sumber
Untuk "membatalkan permohonan" migrasi paling banyak (baru-baru ini?) Setelah migrasi diterapkan ke database:
Semoga ini bisa membantu dan berlaku untuk setiap migrasi dalam proyek ... Saya menguji ini hanya untuk migrasi terbaru ...
Selamat coding!
sumber
Dalam Paket Manager Console:
Update-Database Your_Migration_You_Want_To_Revert_To
Lebih banyak opsi dan penjelasan tentang cara mengembalikan migrasi dapat dilihat di sini
sumber
Anda harus menghapus data migrasi '20160703192724_MyFirstMigration' dari tabel '_EFMigrationsHistory' .
jika tidak , perintah ini akan menghapus migrasi dan menghapus folder migrasi:
sumber
Secara umum jika Anda menggunakan Package Manager Console cara yang tepat untuk menghapus Migrasi tertentu adalah dengan merujuk nama migrasi
Cara lain untuk menghapus migrasi terakhir yang telah Anda terapkan sesuai dengan dokumen adalah dengan menggunakan perintah:
Perintah ini harus dijalankan dari command prompt pengembang ( cara membuka command prompt ) di dalam direktori solusi Anda.
Misalnya jika aplikasi Anda ada di dalam nama "Aplikasi" dan ada di folder c: \ Projects. Maka jalan Anda seharusnya:
sumber
Untuk membatalkan permohonan migrasi di EF Core 1.0 gunakan perintah:
pembaruan basis data dotnet ef {migration_name}
Gunakan nama migrasi dari migrasi sampai Anda ingin menyimpan perubahan Anda. Daftar nama migrasi dapat ditemukan menggunakan:
dotnet ef daftar migrasi
sumber
Untuk mengembalikan semua migrasi yang diterapkan ke DB jalankan saja:
Ini harus diikuti dengan menjalankan
Remove-Migration
sebanyak mungkin file migrasi yang terlihat di direktori Migrasi. Perintah menghapus migrasi terbaru dan juga memperbarui snapshot.sumber
pertama jalankan perintah berikut:
dan kemudian jalankan yang ini:
Selesai
sumber
sumber
1.temukan tabel "dbo._EFMigrationsHistory", lalu hapus catatan migrasi yang ingin Anda hapus. 2. jalankan "hapus-migrasi" di PM (Package Manager Console). Bekerja untukku.
sumber