web-dev-qa-db-ja.com

ASP.NET CoreからEF Coreへの移行を適用解除する方法

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の最新リリースを使用しています。

122
nam

dotnet ef database update <previous-migration-name>を使う

それから最後の移行を削除してみてください。

データベースに変更を適用したため、データベースを更新せずに移行を削除することはできません。

140
adem caglin

すべての移行を完全に削除して最初からやり直すには、次の手順を実行します。

dotnet ef database update 0
dotnet ef migrations remove
91
Ronald Ramos

それでもUpdate-Databaseコマンドを使用できます。

Update-Database -Migration <migration name> -Context <context name>

しかし、あなたのマイグレーションの名前から判断すると、私はそれが最初のマイグレーションであると仮定しているので、コマンドは機能しないかもしれません。データベースの__MigrationHistoryテーブルからエントリを削除してから、Remove-Migrationコマンドを再度実行することができます。移行ファイルを削除して、もう一度やり直すこともできます。

46
Brad

最後に適用した移行を元に戻すには(パッケージマネージャコンソールコマンド):

  1. データベースからの移行を元に戻します:PM> Update-Database <prior-migration-name>
  2. プロジェクトから移行ファイルを削除します(または、次の手順で再度適用されます)。
  3. モデルのスナップショットを更新します。PM> Remove-Migration

UPD:2番目のステップは、最新バージョンのVisual Studio(2017)では必要ないようです。

21

単に値で移行をターゲットにできる

 Update-Database -Migration:0

それから先に行き、それを取除いて下さい

 Remove-Migration
18
John Nyingi

データベースにすでに適用された後で最も最近の(最近の)移行を「適用解除」するには

  1. SQL Serverオブジェクトエクスプローラを開きます([表示] - > [SQL Serverオブジェクトエクスプローラ])。
  2. 小さな三角形を横に広げて、プロジェクトにリンクされているデータベースに移動します。
  3. 「テーブル」を展開する
  4. "dbo._EFMigrationsHistory"という名前のテーブルを見つけます。
  5. それを右クリックして[データの表示]を選択すると、Visual Studioのテーブルエントリが表示されます。
  6. 適用を解除したいマイグレーションに対応する行を削除します(プロンプトが出されたら、警告に対して "yes"と言います)。
  7. Project.jsonファイルがあるディレクトリのコマンドウィンドウで、再度 "dotnet ef migrations remove"を実行します。あるいは、パッケージマネージャコンソールで "Remove-Migration"コマンドを実行してください。

これが助けになり、プロジェクト内のすべての移行に適用できることを願っています。

ハッピーコーディング!

15
Raj

特定の移行を適用解除するには

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
8
AlbertK

パッケージマネージャコンソールで:

Update-Database Your_Migration_You_Want_To_Revert_To

移行を元に戻す方法に関するその他のオプションと説明は、こちら にあります。

8
Drewskis

一般に、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
7

'_EFMigrationsHistory'テーブルから移行 '20160703192724_MyFirstMigration'レコードを削除する必要があります。

それ以外の場合、このコマンドは移行を削除し、移行フォルダを削除します。

   > remove-migration -force
6
AminGolmahalle

EF Core 1.0で移行を適用解除するには、次のコマンドを使用します。

dotnet efデータベースの更新{migration_name}

変更を保存したいと思うまでマイグレーションのマイグレーション名を使用してください。移行の名前のリストは、次のようにして見つけることができます。

dotnet efの移行リスト

2
Rufus Lobo
var context = serviceProvider.GetRequiredService<ApplicationDbContext>();
var userManager = serviceProvider.GetRequiredService<UserManager<ApplicationUser>>();
var roleManaget = serviceProvider.GetRequiredService<RoleManager<IdentityRole>>();

await context.Database.EnsureDeletedAsync();
0
Kishor Gujar