はじめに
EntityFramework Coreを触っていると、マイグレーションを少し戻したり作り直したりするのに dotnet ef
から始まるコマンドラインツールをよく利用します。ただこのコマンド、毎回プロジェクトのビルドが挟まる関係で、、、重い。
特にマイグレーションを一つ戻すために、マイグレーションの一覧表示(list)→データベースの更新(update)->マイグレーションの削除(remove)→マイグレーションの作作成(add)をする場合に毎回ビルドが挟まると都度作業が止まってストレスが溜まります。念のため作業の開始時(一覧表示)にビルドは走ってもいいけれど、それ以降は一連の流れなんだから毎回ビルドは走ってほしくない。そんな時はno-buildオプションを使いましょう。
使い方
ビルドが不要なステップでは--no-build
をつけるとビルドが不要になります。
> dotnet ef migrations list --no-build
20230703100000_first
20230703110000_second
20230703120000_third
> dotnet ef migrations update 20230703110000_second --no-build
Done.
> dotnet ef migrations remove --no-build
Removing migration '20230703110000_second'.
Reverting the model snapshot.
Done.
> dotnet ef migrations add 20230703120000_third
Build started...
Build succeeded.
Done. To undo this action, use 'ef migrations remove'
> dotnet ef database update
Build started...
Build succeeded.
Done.
注意
remove → (同じ名前で)addする場合は、ビルドした後でないと、すでにマイグレーションが存在するエラーになります。
> dotnet ef migrations remove --no-build
Removing migration '20230703110000_second'.
Reverting the model snapshot.
Done.
> dotnet ef migrations add 20230703120000_third --no-build
The name 'third' is used by an existing migration.
また、追加したマイグレーションスクリプトをもとにデータベースを更新する場合エラーは発生しませんが、ビルドを行わないと最新の(ビルドしていない)マイグレーションはデータベースに反映されません。
おわりに
実際に追加したマイグレーションスクリプトとビルド後のアセンブリが同期していないと怖い動作(addやupdate)はビルドしたほうがよさそうですね。