lycheejam's tech log

チラ裏のメモ帳 | プログラミングは苦手、インフラが得意なつもり。

EntityFramework CoreでDBの状態を過去のマイグレーションに戻す。

概要

EntityFramework Coreで不要なテーブルを作成してしまったり変更を加えてしまったりしてしまい
元に戻す必要があったため、その手順メモです。

目次

環境

  • MacOS Mojave Version 10.14.3
  • .Net Core SDK Version 2.2.104
  • dotnet ef version
$ dotnet ef --info

                     _/\__
               ---==/    \\
         ___  ___   |.    \|\
        | __|| __|  |  )   \\\
        | _| | _|   \_/ |  //|\\
        |___||_|       /   \\\/\\

Entity Framework Core .NET Command-line Tools 2.2.2-servicing-10034

前提

  • ASP.NET Core MVCテンプレートの個人認証(Identity)付きプロジェクト
  • DB接続プロバイダ
    • Pomelo.EntityFrameworkCore.MySql Version:2.2.0
  • 必要パッケージ
    • Microsoft.EntityFrameworkCore.Design Version:2.2.2

参考サイト様

手順

以下手順を.csprojファイルが存在するディレクトリで作業を実施する。

migration履歴を確認

dotnet ef migrations listコマンドで過去のmigration一覧を確認します。
裏でビルドが走ってるようなので一覧表示まで少し時間がかかる。

$ dotnet ef migrations list
# ログ省略
20190302063727_init
20190304170151_consumer_key_table

現状20190304170151_consumer_key_table時点の状態となっているが不要な変更であったため
20190302063727_init時点の状態にDBを戻す作業となります。

DBの状態を指定した時点に戻す

dotnet ef database update <Migration Name>で戻したい時点のMigrationを指定します。
こうすることでDBの状態が指定したMigration時点に戻ります。

$ dotnet ef database update 20190302063727_init
# ログ省略
Done.

これでDBの状態が20190304170151_consumer_key_tableの時点から20190302063727_initに戻りました。

不要なMigrationの削除

完全に不要なので20190304170151_consumer_key_tableを削除します。
(不要と言うより今後、邪魔になるので。)

$ dotnet ef migrations remove
# ログ省略
Removing migration '20190304170151_consumer_key_table'.
Reverting model snapshot.
Done.

トラブルシュート

dotnet ef migrations removeするとエラー

現在適用されているmigrationをいきなり削除しようとするとエラーになる。
(migrationを削除することでdatabase updateも勝手にやってくれると思ってた。)
エラーは下記の通り。

$ dotnet ef migrations remove
# ログ省略
The migration '20190304170151_consumer_key_table' 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.

回避策は上記で述べた手順で実行すれば良い。

雑感

dotnet cli用のチートシートを作ろう作ろうと思いつつメモばかりが溜まってるので少しブログで放出