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

Entity Framework Core 用のパッケージ マネージャー コンソール (PMC) ツールは、デザイン時の開発タスクを実行します。 たとえば、移行の作成、移行の適用、既存のデータベースに基づくモデルの作成などを行います。 コマンドは、パッケージ マネージャー コンソールを使用して Visual Studio 内で実行されます。 これらのツールは、.NET Framework プロジェクトと .NET Core プロジェクトの両方に使えます。

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

ツールのインストール

パッケージ マネージャー コンソールで次のコマンドを実行して、パッケージ マネージャー コンソール ツールをインストールします。

Install-Package Microsoft.EntityFrameworkCore.Tools

パッケージ マネージャー コンソールで次のコマンドを実行して、ツールを更新します。

Update-Package Microsoft.EntityFrameworkCore.Tools

インストールの確認

次のコマンドを実行して、ツールがインストールされていることを確認します。

Get-Help about_EntityFrameworkCore

出力は次のようになります (使用しているツールのバージョンは示されません)。


                     _/\__
               ---==/    \\
         ___  ___   |.    \|\
        | __|| __|  |  )   \\\
        | _| | _|   \_/ |  //|\\
        |___||_|       /   \\\/\\

TOPIC
    about_EntityFrameworkCore

SHORT DESCRIPTION
    Provides information about the Entity Framework Core Package Manager Console Tools.

<A list of available commands follows, omitted here.>

ツールの使用

ツールを使用する前に:

  • ターゲット プロジェクトとスタートアップ プロジェクトの違いを理解する。
  • .NET Standard クラス ライブラリでツールを使用する方法を学習する。
  • ASP.NET Core プロジェクトの場合は、環境を設定する。

ターゲット プロジェクトとスタートアップ プロジェクト

コマンドは、"プロジェクト" と "スタートアップ プロジェクト" を参照します。

  • "プロジェクト" は、コマンドでファイルを追加または削除する場所であるため、"ターゲット プロジェクト" とも呼ばれます。 既定では、パッケージ マネージャー コンソールで選択される既定のプロジェクトがターゲット プロジェクトです。 パラメーターを使用して -Project 、別のプロジェクトをターゲット プロジェクトとして指定できます。

  • "スタートアップ プロジェクト" は、ツールによって構築され、実行されるプロジェクトです。 ツールでは、デザイン時にアプリケーション コードを実行して、データベース接続文字列やモデルの構成など、プロジェクトに関する情報を取得する必要があります。 既定では、ソリューション エクスプローラースタートアップ プロジェクトが、スタートアップ プロジェクトです。 パラメーターを使用して、スタートアップ プロジェクトとして別のプロジェクトを -StartupProject 指定できます。

多くの場合、スタートアップ プロジェクトとターゲット プロジェクトは同じプロジェクトです。 これらが別個のプロジェクトである一般的なシナリオは、次のような場合です。

  • EF Core コンテキストとエンティティ クラスが、.NET Core クラス ライブラリ内にある。
  • .NET Core コンソール アプリまたは Web アプリでクラス ライブラリを参照する。

EF Core コンテキストとは別のクラス ライブラリに移行コードを配置することもできます。

その他のターゲット フレームワーク

パッケージ マネージャー コンソール ツールは、.NET Core または .NET Framework プロジェクトで機能します。 EF Core モデルが .NET Standard クラス ライブラリ内にあるアプリには、.NET Core または .NET Framework プロジェクトがない場合があります。 たとえば、Xamarin およびユニバーサル Windows プラットフォーム アプリがこれに該当します。 このような場合、ツールのスタートアップ プロジェクトとして機能することのみを目的とする .NET Core または .NET Framework コンソール アプリ プロジェクトを作成できます。 このプロジェクトは、実際のコードを持たないダミー プロジェクトにすることができます。これは、ツールのターゲットを提供するためにのみ必要です。

ダミー プロジェクトはなぜ必要なのでしょうか? 前にも述べたとおり、ツールでは、デザイン時にアプリケーション コードを実行する必要があります。 そのためには、ツールで .NET Core または .NET Framework ランタイムを使用する必要があります。 EF Core モデルが、.NET Core または .NET Framework を対象とするプロジェクト内にある場合、EF Core ツールは、プロジェクトからランタイムを借用します。 EF Core モデルが .NET Standard クラス ライブラリ内にある場合、ツールは借用できません。 .NET Standard は実際の .NET 実装ではありません。これは、.NET 実装でサポートする必要がある一連の API に関する仕様です。 このため、EF Core ツールがアプリケーション コードを実行するには、.NET Standard では不十分です。 スタートアップ プロジェクトとして使用するために作成するダミー プロジェクトは、ツールで .NET Standard クラス ライブラリを読み込むことができる具象ターゲット プラットフォームを提供します。

ASP.NET Core 環境

ASP.NET Core プロジェクト用の環境を指定するには、コマンドを実行する前に、env:ASPNETCORE_ENVIRONMENT を設定します。

EF Core 5.0 以降では、追加の引数を Program.CreateHostBuilder に渡すこともできます。これらを使用すると、コマンドラインで環境を指定できます。

Update-Database -Args '--environment Production'

共通パラメーター

次の表に、すべての EF Core コマンドに共通するパラメーターを示します。

パラメーター 説明
-Context <String> 使用する DbContext クラス。 クラス名のみ、または名前空間で完全修飾された名前。 このパラメーターを省略すると、EF Core によってコンテキスト クラスが検出されます。 複数のコンテキスト クラスがある場合、このパラメーターが必要です。
-Project <String> ターゲット プロジェクト。 このパラメーターを省略すると、パッケージ マネージャー コンソール既定プロジェクトがターゲット プロジェクトとして使用されます。
-StartupProject <String> スタートアップ プロジェクト。 このパラメーターを省略すると、ソリューション プロパティスタートアップ プロジェクトがターゲット プロジェクトとして使用されます。
-Args <String> アプリケーションに渡される引数。 EF Core 5.0 で追加されました。
-Verbose 詳細出力を表示します。

コマンドに関するヘルプ情報を表示するには、PowerShell の Get-Help コマンドを使用します。

ヒント

ContextProjectStartupProject の各パラメーターでは、タブ拡張がサポートされます。

Add-Migration

新しい移行を追加します。

パラメーター:

パラメーター 説明
-Name <String> 移行の名前。 これは、位置指定パラメーターであり、必須です。
-OutputDir <String> ファイルの出力に使用するディレクトリ。 パスは、ターゲット プロジェクト ディレクトリに対する相対パスです。 既定値は "Migrations" です。
-Namespace <String> 生成されるクラスに使用する名前空間。 既定値は、出力ディレクトリから生成されます。 EF Core 5.0 で追加されました。

共通パラメーターは、上記のとおりです。

Bundle-Migration

データベースを更新するための実行可能ファイルを作成します。

パラメーター:

パラメーター 説明
-Output <String> 作成する実行可能ファイルのパス。
-Force 既存のファイルを上書きします。
-SelfContained .NET ランタイムもバンドルして、それをマシンにインストールする必要がないようにします。
-TargetRuntime <String> バンドルするターゲット ランタイム。
-Framework <String> ターゲット フレームワーク。 既定では、プロジェクト内の最初のものです。

共通パラメーターは、上記のとおりです。

Drop-Database

データベースをドロップします。

パラメーター:

パラメーター 説明
-WhatIf ドロップされるデータベースを表示しますが、ドロップは行われません。

共通パラメーターは、上記のとおりです。

Get-DbContext

使用可能な DbContext 型に関する情報を一覧表示し、取得します。

共通パラメーターは、上記のとおりです。

Get-Migration

使用可能な移行を一覧表示します。 EF Core 5.0 で追加されました。

パラメーター:

パラメーター 説明
-Connection <String> データベースへの接続文字列。 既定値は、AddDbContext または OnConfiguring で指定された文字列です。
-NoConnect データベースに接続しません。

共通パラメーターは、上記のとおりです。

Optimize-DbContext

DbContext で使用されるモデルのコンパイル済みバージョンを生成します。 EF Core 6 で追加されました。

詳細については、「コンパイル済みモデル」を参照してください。

パラメーター:

パラメーター 説明
-OutputDir <String> ファイルを格納するディレクトリ。 パスは、プロジェクト ディレクトリに対する相対パスです。
-Namespace <String> 生成されるすべてのクラスに使用する名前空間。 既定値は、ルート名前空間、および出力ディレクトリと CompiledModels から生成されます。

共通パラメーターは、上記のとおりです。

次の例では、既定値を使用し、プロジェクトに 1 つ DbContext しかない場合に機能します。

Optimize-DbContext

次の例では、指定された名前を持つコンテキストに対してモデルを最適化し、それを個別のフォルダーと名前空間に配置します。

Optimize-DbContext -OutputDir Models -Namespace BlogModels -Context BlogContext

Remove-Migration

最後の移行を削除します (移行のために行われたコード変更をロールバックします)。

パラメーター:

パラメーター 説明
-Force 移行を元に戻します (データベースに適用された変更をロールバックします)。

共通パラメーターは、上記のとおりです。

Scaffold-DbContext

DbContext のコードとデータベースのエンティティ型を生成します。 Scaffold-DbContext でエンティティ型を生成するには、データ テーブルに主キーが含まれている必要があります。

パラメーター:

パラメーター 説明
-Connection <String> データベースへの接続文字列。 ASP.NET Core 2.x プロジェクトの場合、値を、"name=<接続文字列の名前>" にすることができます。 その場合、名前は、プロジェクト用に設定された構成ソースから取得されます。 これは、位置指定パラメーターであり、必須です。
-Provider <String> 使用するプロバイダー。 通常、これは、NuGet パッケージの名前です (例: Microsoft.EntityFrameworkCore.SqlServer)。 これは、位置指定パラメーターであり、必須です。
-OutputDir <String> エンティティ クラス ファイルを格納するディレクトリ。 パスは、プロジェクト ディレクトリに対する相対パスです。
-ContextDir <String> DbContext ファイルを格納するディレクトリ。 パスは、プロジェクト ディレクトリに対する相対パスです。
-Namespace <String> 生成されるすべてのクラスに使用する名前空間。 既定値は、ルート名前空間と出力ディレクトリから生成されます。 EF Core 5.0 で追加されました。
-ContextNamespace <String> 生成される DbContext クラスに使用する名前空間。 注: -Namespace をオーバーライドします。 EF Core 5.0 で追加されました。
-Context <String> 生成する DbContext クラスの名前。
-Schemas <String[]> エンティティ型を生成するテーブルのスキーマ。 このパラメーターを省略すると、すべてのスキーマが含まれます。
-Tables <String[]> エンティティ型を生成するテーブル。 このパラメーターを省略すると、すべてのテーブルが含まれます。
-DataAnnotations 属性を使用してモデルを構成します (可能な場合)。 このパラメーターを省略すると、fluent API のみが使用されます。
-UseDatabaseNames データベースに出現するとおりのテーブル名と列名を使用します。 このパラメーターを省略すると、データベース名が、C# の名前スタイル規則により厳密に準拠するように変更されます。
-Force 既存のファイルを上書きします。
-NoOnConfiguring DbContext.OnConfiguring を生成しません。 EF Core 5.0 で追加されました。
-NoPluralize pluralizer を使用しません。 EF Core 5.0 で追加されました。

共通パラメーターは、上記のとおりです。

例:

Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models

選択したテーブルのみをスキャフォールディングし、指定した名前と名前空間を持つ個別のフォルダーにコンテキストを作成する例:

Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -Tables "Blog","Post" -ContextDir Context -Context BlogContext -ContextNamespace New.Namespace

次の例では、Secret Manager ツールを使用して設定された可能性のあるプロジェクトの構成から接続文字列を読み取ります。

Scaffold-DbContext "Name=ConnectionStrings:Blogging" Microsoft.EntityFrameworkCore.SqlServer

Script-DbContext

SQL スクリプトを DbContext から生成します。 すべての移行をバイパスします。

パラメーター:

パラメーター 説明
-Output <String> 結果の書き込み先となるファイル。

共通パラメーターは、上記のとおりです。

Script-Migration

選択されたある移行のすべての変更を、選択された別の移行に適用する SQL スクリプトを生成します。

パラメーター:

パラメーター 説明
-From <String> 開始移行。 移行は、名前または ID で識別できます。 数値 0 は特殊なケースで、"最初の移行の前" を意味します。 既定値は 0 です。
-To <String> 終了移行。 既定値は、最後の移行です。
-Idempotent 任意の移行時にデータベースで使用できるスクリプトを生成します。
-NoTransactions SQL トランザクション ステートメントを生成しません。 EF Core 5.0 で追加されました。
-Output <String> 結果の書き込み先となるファイル。 このパラメーターを省略すると、アプリのランタイム ファイルが作成されたフォルダーと同じフォルダーに生成された名前でファイルが作成されます (例: /obj/Debug/netcoreapp2.1/ghbkztfz.sql/)。

共通パラメーターは、上記のとおりです。

ヒント

ToFromOutput の各パラメーターでは、タブ拡張がサポートされます。

次の例では、移行名を使用して、(移行のないデータベースから) InitialCreate 移行のスクリプトを生成します。

Script-Migration 0 InitialCreate

次の例では、移行 ID を使用して、InitialCreate 移行後のすべての移行のスクリプトを生成します。

Script-Migration 20180904195021_InitialCreate

Update-Database

データベースを最後の移行または指定された移行に更新します。

パラメーター 説明
-Migration <String> ターゲット移行。 移行は、名前または ID で識別できます。 数値 0 は特殊なケースで、"最初の移行の前" を意味し、すべての移行を元に戻します。 移行を指定しない場合、コマンドでは、既定値が最後の移行に設定されます。
-Connection <String> データベースへの接続文字列。 既定値は、AddDbContext または OnConfiguring で指定された文字列です。 EF Core 5.0 で追加されました。

共通パラメーターは、上記のとおりです。

ヒント

Migration パラメーターでは、タブ拡張がサポートされます。

次の例では、すべての移行を元に戻します。

Update-Database 0

次の例では、データベースを指定された移行に更新します。 1 つ目は移行名を使用し、2 つ目は、移行 ID と指定された接続を使用します。

Update-Database InitialCreate
Update-Database 20180904195021_InitialCreate -Connection your_connection_string

その他の技術情報