Entity Frameworkを使う時にdotnet ef(.Net Core)コマンドを多用しているのでマイグレーションコマンド一覧とハマったことをまとめてみました。
dotnet efコマンド説明の公式はこちら
モデルを作ってマイグレーションまでの流れは以前の記事で行なっているので、
気になる方はこちらを参照してください。
コマンド導入編
dotnetコマンドの導入
こちらからインストーラーで導入します。
dotnet efコマンドの導入
下記コマンドでインストールできます。
dotnet tool install --global dotnet-ef
コマンド一覧
全般
バージョン確認
dotnet ef --version
コンテキストに対してのコマンド(dbcontext)
データベースコンテキストの一覧表示
dotnet ef dbcontext list
作成しているデータベースコンテキストが一覧表示されます。
実行例:
>dotnet ef dbcontext list
poc_azure_function.DBContext
データベースの情報確認
dotnet ef dbcontext info
実行すると、データベース名や接続先が確認できるようです。
実行例:
>dotnet ef dbcontext info
Provider name: Microsoft.EntityFrameworkCore.SqlServer
Database name: test01
Data source: localhost,1433
Options: None
データベースに対してのコマンド(database)
マイグレーション実行
dotnet ef database update
マイグレーションファイルからマイグレーションを実行します。
データベースがない場合は作ってくれます。
ビルドエラーがあると、こちらもエラーになるので、エラーがない状態で実行しないとダメです…
実行例:
>dotnet ef database update
Applying migration '20200210141827_InitialCreate'.
Applying migration '20200506131531_AddIndex'.
Done.
全テーブル削除
dotnet ef database drop
マイグレーションファイルの有無に関わらず削除してくれます。
データベースも消えます。
実行例:
>dotnet ef database drop
Are you sure you want to drop the database 'test01' on server 'localhost,1433'? (y/N)
y
Entity Framework Core 2.2.6-servicing-10079 initialized 'DBContext' using provider 'Microsoft.EntityFrameworkCore.SqlServer' with options: None
Dropping database 'test01'.
マイグレーションファイルに対してのコマンド(migration)
マイグレーションファイル作成
dotnet ef migrations add [マイグレーションファイル名]
マイグレーションファイルを作成します。モデルに更新がかかった時に行います。
ファイル名はなんでも良さそうですが、
カラム追加の場合はAddColumnで更新の場合はUpdateColumnなど、わかりやすい規則を決めておくと良さそうです。
実行例:
> dotnet ef migrations add AddColumnZipCode
Done. To undo this action, use 'ef migrations remove'
マイグレーション一覧表示
dotnet ef migrations list
作成したマイグレーションファイルの一覧が確認できます。
実行例:
> dotnet ef migrations list
20200210141827_InitialCreate
20200506131531_AddIndex
20200715065232_AddColumnZipCode
ハマったこと
追加したカラムの順番が変わらない
マイグレーションした時にカラムの順番が、モデルに並べた順番になりませんでした。
sqlserverの仕様で、追加したカラムの位置を指定する方法はないようです。。
mysql+laravelならafterで出来るのに…
対応策として、一度全てのマイグレーションを削除して、ひとつのファイルにするといったことをしました。
viewが作れない
viewを作りたかったのに、簡単に作れませんでした。
マイグレーションファイルに直接SQLを書く方法をで解決しました。
こちらの記事でやってみています。
indexが貼れない
indexが貼れませんでした。これもマイグレーションファイルに直接記述しました。
こちらの記事でやってみています。
コメント