「あ、制約つけ忘れた」
「やっぱカラム追加したほうがいいなぁ」
テーブル作成前に戻したいなってこと、ありますよね。
これまで ASP.NET を使った経験がなく、職場の先輩に教えてもらったので、メモとして残しておきます。
マイグレーションとは?
データベースを削除してから作り直すと,DBに保存されている情報が全て削除されてしまいます. こういった事態を回避する方法として、データベースマイグレーションを行う方法があります。 マイグレーションとは、DBに保存されているデータを保持したまま、テーブルの作成やカラムの変更などを行うための機能です。
densanlabsから引用
手順
データベースの状態を、指定したマイグレーションまで戻したいときの手順は以下のとおりです。
- 戻したいマイグレーションファイルを確認する
-
Update-Database
を実行する -
remove-migration
を実行する -
add-migration
を実行する -
update-database
を実行する
それでは順番に確認していきましょう。
戻したいマイグレーションファイルを確認する
まずは戻したいマイグレーションファイルを確認しましょう。
20220303115938_User.cs
20220304115938_Wallet.cs
20220305115938_Item.cs
このようにマイグレーションファイルがあるとして、20220305115938_Item.cs
を削除したいとします。
Update-Database
を実行する
戻したいマイグレーションファイルを確認したら、次はコマンドを実行していきます。
[ツール] メニューで、[NuGet パッケージ マネージャー] > [パッケージ マネージャー コンソール] の順に選択します。
これからコマンドを実行するわけですが、注意点があります。
20220305115938_Item.cs
を削除したい場合、20220304115938_Wallet.cs
をUpdate-Database
で指定することです。
つまり、削除したいマイグレーションファイル(20220305115938_Item.cs
)の一つ前を指定して、Update-Database
を実行します。
コンソールで下記のようにコマンドを実行してください。
PM> Update-Database 20220304115938_Wallet
Build started...
Build succeeded.
Done.
これでデータベースは20220304115938_Wallet.cs
まで戻りました。
(この時点ではマイグレーションファイルは削除されていません。)
remove-migration
を実行する
不要になったマイグレーションファイルを削除していきます。
下記のコマンドを実行してください。
PM> remove-migration
Build started...
Build succeeded.
Removing migration '20220305115938_Item'.
Reverting the model snapshot.
Done.
これでマイグレーションが削除されます。
ちなみに、エディタから直接ファイルを消すと、もう一度テーブルを作成するときにエラーが発生します。
remove-migration
コマンドで削除するようにしましょう。
削除だけの場合、ここまでで終了です。
update-database
を実行して、更新を反映させておきましょう。
add-migration
を実行する
設定を見直したり、追加したらもう一度テーブルを作成します。
PM> add-migration Item
Build started...
Build succeeded.
To undo this action, use Remove-Migration.
update-database
を実行する
最後にupdate-database
を実行して、更新を反映させます。
PM> update-database
Build started...
Build succeeded.
Done.
これで完了です。
まとめ
テーブル操作は慎重になりますよね。
最初はビビりながらも、たくさん経験していくことで慣れてくると思います。
地味にハマったので、記事にしました。
少しでも参考になれば幸いです。
参考資料
チュートリアル: ASP.NET MVC アプリで EF の移行を使用して Azure にデプロイする
Entity Framework Core ツールのリファレンス - Visual Studio のパッケージ マネージャー コンソール