EFコアを使用してASP.NETコアプロジェクトでVS2015でPM> Remove-Migration -context BloggingContext
を実行すると、次のエラーが発生します。
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.
どうすればそれを適用解除できますか? ASP.NET Core 1.0、EF Core、およびVS2015 Update 3の最新リリースを使用しています。
dotnet ef database update <previous-migration-name>
を使う
それから最後の移行を削除してみてください。
データベースに変更を適用したため、データベースを更新せずに移行を削除することはできません。
すべての移行を完全に削除して最初からやり直すには、次の手順を実行します。
dotnet ef database update 0
dotnet ef migrations remove
それでもUpdate-Database
コマンドを使用できます。
Update-Database -Migration <migration name> -Context <context name>
しかし、あなたのマイグレーションの名前から判断すると、私はそれが最初のマイグレーションであると仮定しているので、コマンドは機能しないかもしれません。データベースの__MigrationHistory
テーブルからエントリを削除してから、Remove-Migration
コマンドを再度実行することができます。移行ファイルを削除して、もう一度やり直すこともできます。
最後に適用した移行を元に戻すには(パッケージマネージャコンソールコマンド):
PM> Update-Database <prior-migration-name>
PM> Remove-Migration
UPD:2番目のステップは、最新バージョンのVisual Studio(2017)では必要ないようです。
単に値で移行をターゲットにできる
Update-Database -Migration:0
それから先に行き、それを取除いて下さい
Remove-Migration
データベースにすでに適用された後で最も最近の(最近の)移行を「適用解除」するには
これが助けになり、プロジェクト内のすべての移行に適用できることを願っています。
ハッピーコーディング!
特定の移行を適用解除するには:
dotnet ef database update <previous-migration-name>
or
PM> Update-Database -Migration <previous-migration-name>
すべての移行を適用解除するには:
dotnet ef database update 0
or
PM> Update-Database -Migration 0
最後の移行を削除するには、
dotnet ef migrations remove
or
PM> Remove-Migration
最後の移行を適用せずに削除するには、
dotnet ef migrations remove --force
or
PM> Remove-Migration -Force
パッケージマネージャコンソールで:
Update-Database Your_Migration_You_Want_To_Revert_To
一般に、Package Managerコンソールを使用している場合、特定の移行を削除する正しい方法は、移行の名前を参照することです。
Update-Database -Migration {Name of Migration} -Context {context}
のドキュメント に従って最後に適用した移行を削除するもう1つの方法は、次のコマンドを使用することです。
dotnet ef migrations remove
このコマンドは、ソリューションディレクトリ内の開発者コマンドPrompt( How to command Prompt )から実行する必要があります。
たとえば、アプリケーションが "Application"という名前の中にあり、フォルダc:\ Projectsにあるとします。それならあなたのパスは以下のようになるはずです。
C:\Projects\Application
'_EFMigrationsHistory'テーブルから移行 '20160703192724_MyFirstMigration'レコードを削除する必要があります。
それ以外の場合、このコマンドは移行を削除し、移行フォルダを削除します。
> remove-migration -force
EF Core 1.0で移行を適用解除するには、次のコマンドを使用します。
dotnet efデータベースの更新{migration_name}
変更を保存したいと思うまでマイグレーションのマイグレーション名を使用してください。移行の名前のリストは、次のようにして見つけることができます。
dotnet efの移行リスト
var context = serviceProvider.GetRequiredService<ApplicationDbContext>();
var userManager = serviceProvider.GetRequiredService<UserManager<ApplicationUser>>();
var roleManaget = serviceProvider.GetRequiredService<RoleManager<IdentityRole>>();
await context.Database.EnsureDeletedAsync();