概要
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
参考サイト様
- https://stackoverflow.com/questions/38192450/how-to-unapply-a-migration-in-asp-net-core-with-ef-core 🔗
- https://docs.microsoft.com/ja-jp/ef/core/miscellaneous/cli/dotnet 🔗
- https://docs.microsoft.com/ja-jp/ef/core/managing-schemas/migrations/ 🔗
手順
以下手順を.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用のチートシートを作ろう作ろうと思いつつメモばかりが溜まってるので少しブログで放出