[C#]EntityFramework(dotnet ef)マイグレーションまとめ

C#

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が貼れませんでした。これもマイグレーションファイルに直接記述しました。

こちらの記事でやってみています。

コメント

タイトルとURLをコピーしました