Visual StudioパッケージマネージャーコンソールでEFCoreマイグレーションをする

.NET
スポンサーリンク

Visual Studio 2022のパッケージマネージャーコンソールで、EFCoreのマイグレーションを行うときのコマンド。

キーワード

  • Visual Studio 2022
  • Microsoft.EntityFrameworkCore
  • Microsoft.EntityFrameworkCore.Tools
  • Microsoft.EntityFrameworkCore.SqlServer

 

スポンサーリンク

Visual Studioのコンソール? EFcore CLI ?

Visual Studioを使用している場合は、Visual Studio内のパッケージマネージャーコンソールの使用を検討するべき。

Visual Studio使っていないなどの場合はEFCore コマンドラインツール(CLI)を使うといいよ。

ということらしい。

コマンドは、パッケージ マネージャー コンソールを使用して Visual Studio 内で実行されます。 これらのツールは、.NET Framework プロジェクトと .NET Core プロジェクトの両方に使えます。

Visual Studio を使用していない場合は、代わりに EF Core コマンド ライン ツールを使用することをお勧めします。 .NET Core CLI ツールはクロスプラットフォームであり、コマンド プロント内で実行されます。

Entity Framework Core ツールのリファレンス – Visual Studio のパッケージ マネージャー コンソール

使うコマンドが違うので注意する!

 

パッケージ マネージャー コンソールを使用してマイグレーション

マイグレーションの準備

Visual Studio内で以下の操作を行い、コンソールを開く。

(タブバー > )ツール > Nuget パッケージ マネージャー > パッケージ マネージャー コンソール

画面上にパッケージ マネージャー コンソールが開く。

 

Visual Studioのスタートアッププロジェクトを、app-settings.jsonなどがありStartup.csなどがあるプロジェクトを選択する。

パッケージ マネージャー コンソール上側の「規定のプロジェクト」を選べるので、DbContextがあるプロジェクトを選択する。

 

コンソール上で、カレントディレクトリにDbContextがあるプロジェクトを選択する。

その後、Enable-Migrationsというコマンドを入力する

PM> cd {プロジェクトのcdprojファイルがあるディレクトリ}
PM> Enable-Migrations

 

マイグレーションファイルの追加

Enable-Migrationsをすると、コンソール上で、「Add-Migrationでマイグレーションできるよ」と言ってもらえるので、Add-Migrationする。

名前を入力するよう求められるので、「Initial」など、任意の名前を入力して続行する。

PM> Add-Migration
// するとこのようなサジェスチョン?が出てくるので、マイグレーションファイルとなる名前を入力する(例えば"Initial"など)
コマンド パイプラインの位置 1のコマンドレット Add-Migration
次のパラメーターに値を指定してください:
Name: Initial

 

そしたらマイグレーションが始まる。

 

マイグレーションファイルは、csprojファイルのあるディレクトリ内に新しく「Migrations」フォルダが自動で作成され、そこに格納される。(Snapshotとともに)

 

データベースの更新

マイグレーションファイルができた後、それに従ってデータベースを更新する際には、Update-databaseをする。

PM> Update-database

 

つまづきポイント

初めのうちはEFCore CLIとパッケージマネージャーコンソールの違いがわかっておらず、
パッケージマネージャーコンソール内で、EFCore CLI用のコマンド(’dotnet ef 系のやつ’)をしてしまい、エラーが出まくっていた。

// こういったコマンドを、パッケージマネージャーコンソール上で実行しても失敗する
PM> dotnet ef migrations add
....
// こう言ったエラーが出た
Unable to create a 'DbContext' of type ''. The exception 'The configuration file 'XXX' was not found and is not optional. The expected physical path was 'XXX'.' was thrown while attempting to create an instance.
タイトルとURLをコピーしました