Entity Framework Core 用のコマンドライン インターフェイス ツールは、デザイン時の開発タスクを実行します。 たとえば、移行の作成、移行の適用、既存のデータベースに基づくモデルの作成などを行います。 コマンドは、.NET SDK の一部であるクロスプラットフォーム dotnet コマンドの拡張機能です。 これらのツールは.NET プロジェクトで動作します。
Visual Studio を使用しているときには、CLI ツールの代わりに、パッケージ マネージャー コンソール ツールを使用することを検討してください。 パッケージ マネージャーコンソール ツールは自動的に次の処理を行います。
- ディレクトリを手動で切り替えずに、パッケージ マネージャー コンソールで現在選択されているプロジェクトと連動する。
- コマンドの完了後に、コマンドで生成されたファイルを開く。
- コマンド、パラメーター、プロジェクト名、コンテキスト型、移行名のタブ補完を提供する。
ツールのインストール
dotnet ef は、グローバルまたはローカルのツールとしてインストールできます。 ほとんどの開発者は、次のコマンドを使用して、dotnet ef をグローバル ツールとしてインストールする方を選びます。
dotnet tool install --global dotnet-ef
ローカル ツールとして使用するには、ツール マニフェスト ファイルを使用してツールの依存関係として宣言するプロジェクトの依存関係を復元します。
次のコマンドを使用して、ツールを更新します。
dotnet tool update --global dotnet-ef
特定のプロジェクトでツールを使用するには、その前に Microsoft.EntityFrameworkCore.Design パッケージを追加する必要があります。
dotnet add package Microsoft.EntityFrameworkCore.Design
インストールを検証する
次のコマンドを実行して、EF Core CLI ツールが正しくインストールされていることを確認します。
dotnet ef
コマンドからの出力で、使用されているツールのバージョンがわかります。
_/\__
---==/ \\
___ ___ |. \|\
| __|| __| | ) \\\
| _| | _| \_/ | //|\\
|___||_| / \\\/\\
Entity Framework Core .NET Command-line Tools 2.1.3-rtm-32065
<Usage documentation follows, not shown.>
ツールを更新する
グローバル ツールを利用可能な最新バージョンに更新するには、dotnet tool update --global dotnet-ef を使用します。 ツールがプロジェクトにローカルにインストールされている場合は、dotnet tool update dotnet-ef を使用します。 特定のバージョンをインストールするには、コマンドに --version <VERSION> を追加します。 詳細については、dotnet tool のドキュメントの更新に関するセクションを参照してください。
ツールの使用
ツールを使用する前に、スタートアップ プロジェクトを作成するか、環境を設定することが必要になる場合があります。
ターゲット プロジェクトとスタートアップ プロジェクト
コマンドは、"プロジェクト" と "スタートアップ プロジェクト" を参照します。
"プロジェクト" は、コマンドでファイルを追加または削除する場所であるため、"ターゲット プロジェクト" とも呼ばれます。 既定では、現在のディレクトリのプロジェクトがターゲット プロジェクトです。
オプションを使用すると、別のプロジェクトをターゲット プロジェクトとして指定できます。--project"スタートアップ プロジェクト" は、ツールによって構築され、実行されるプロジェクトです。 ツールでは、デザイン時にアプリケーション コードを実行して、データベース接続文字列やモデルの構成など、プロジェクトに関する情報を取得する必要があります。 既定では、現在のディレクトリのプロジェクトがスタートアップ プロジェクトです。
オプションを使用すると、別のプロジェクトをスタートアップ プロジェクトとして指定できます。--startup-project
多くの場合、スタートアップ プロジェクトとターゲット プロジェクトは同じプロジェクトです。 これらが別個のプロジェクトである一般的なシナリオは、次のような場合です。
- EF Core コンテキストとエンティティ クラスは、.NET クラス ライブラリにあります。
- .NET コンソール アプリまたは Web アプリは、クラス ライブラリを参照します。
EF Core コンテキストとは別のクラス ライブラリに移行コードを配置することもできます。
その他のターゲット フレームワーク
CLI ツールは、.NET ランタイムを使用してアプリケーション コードを実行する必要があります。 ツールのスタートアップ プロジェクトとして、.NET MAUI、WinUI、Blazor WebAssembly、Azure Functionsなどのプラットフォーム固有のアプリケーションを使用しないでください。 代わりに、IDesignTimeDbContextFactory<TContext>を使用して通常のクロスプラットフォーム .NET プロジェクトに移行を配置し、そのプロジェクトをターゲット プロジェクトとスタートアップ プロジェクトの両方として使用します。
個別の移行Projectの使用を参照してください。
Important
Xamarin.Android、Xamarin.iOS、Xamarin.Mac は、.NET for Android、.NET for iOS、macOS 用 .NET として .NET (.NET 6 以降) に直接統合されるようになりました。 現在、これらのプロジェクトの種類を使用してビルドしている場合は、継続的なサポートのために.NET SDK スタイルのプロジェクトにアップグレードする必要があります。 Xamarin プロジェクトを .NET にアップグレードする方法の詳細については、「Xamarin から .NET へのアップグレード」& .NET MAUI ドキュメントを参照してください。
ツールを実行するプロセスは、ターゲット アセンブリとスタートアップ アセンブリを読み込める必要があります。 たとえば、64 ビット ツール プロセスでは、x86 のみのスタートアップ アセンブリを読み込めません。 AnyCPU 移行プロジェクトを優先します。 デザイン時の依存関係に特定のアーキテクチャが必要な場合は、一致する.NET SDK を明示的に呼び出します。
--runtime オプションは、ランタイム識別子の復元を制御します。現在のツール プロセスのアーキテクチャは変更されません。
ASP.NET Core 環境
ASP.NET Core プロジェクト用の環境はコマンドラインで指定できます。 これと追加の引数は Program.CreateHostBuilder に渡されます。
dotnet ef database update -- --environment Production
Tip
-- トークンは、後に続くすべてのものを引数として扱い、それらをオプションとして解析しないことを dotnet ef に指示します。
dotnet ef によって使用されない追加の引数はアプリに転送されます。
共通オプション
| Option | Short | Description |
|---|---|---|
--json |
JSON 出力を表示します。 | |
--context <DBCONTEXT> |
-c |
使用する DbContext クラス。 クラス名のみ、または名前空間で完全修飾された名前。 このオプションを省略した場合、EF Core によりコンテキスト クラスが検出されます。 複数のコンテキスト クラスがある場合、このオプションが必要です。 |
--project <PROJECT> |
-p |
ターゲット プロジェクトのプロジェクト フォルダーへの相対パス。 既定値は現在のフォルダーです。 |
--startup-project <PROJECT> |
-s |
スタートアップ プロジェクトのプロジェクト フォルダーへの相対パス。 既定値は現在のフォルダーです。 |
--framework <FRAMEWORK> |
ターゲット フレームワークのターゲット フレームワーク モニカー。 プロジェクト ファイルで複数のターゲット フレームワークが指定され、それらのいずれかを選択する場合に使用します。 | |
--configuration <CONFIGURATION> |
ビルド構成 (Debug や Release など)。 |
|
--runtime <IDENTIFIER> |
パッケージを復元するターゲット ランタイムの識別子。 ランタイム ID (RID) の一覧については、RID カタログに関するページをご覧ください。 | |
--no-build |
プロジェクトをビルドしません。 ビルドが最新であるときに使用することを想定しています。 | |
--help |
-h |
ヘルプ情報を表示します。 |
--verbose |
-v |
詳細出力を表示します。 |
--no-color |
出力を色分けしません。 | |
--prefix-output |
レベルを含むプレフィックス出力。 |
追加の引数はすべてアプリケーションに渡されます。
dotnet ef database drop
データベースを削除します。
Options:
| Option | Short | Description |
|---|---|---|
--force |
-f |
確認しないでください。 |
--dry-run |
ドロップされるデータベースを表示しますが、ドロップは行われません。 | |
--connection <CONNECTION> |
データベースへの接続文字列。 既定値は、AddDbContext または OnConfiguring で指定された文字列です。 EF Core 11 で追加されました。 |
一般的なオプションは、上記のとおりです。
dotnet ef database update
データベースを最後の移行または指定された移行に更新します。
Arguments:
| Argument | Description |
|---|---|
<MIGRATION> |
ターゲット移行。 移行は、名前または ID で識別できます。 数値 0 は特殊なケースで、"最初の移行の前" を意味し、すべての移行を元に戻します。 移行を指定しない場合、コマンドでは、既定値が最後の移行に設定されます。 |
Options:
| Option | Description |
|---|---|
--connection <CONNECTION> |
データベースへの接続文字列。 既定値は、AddDbContext または OnConfiguring で指定された文字列です。 |
--add |
新しい移行を作成し、1 つの手順でデータベースに適用します。 Roslyn を使用して、実行時に移行をコンパイルします。 指定した場合は、 <MIGRATION> 引数が必要であり、新しい移行の名前を指定します。 EF Core 11 で追加されました。 |
--output-dir <PATH> |
移行ファイルを配置するディレクトリ。 パスは、ターゲット プロジェクト ディレクトリに対する相対パスです。
--add が必要です。 EF Core 11 で追加されました。 |
--namespace <NAMESPACE> |
生成された移行クラスに使用する名前空間。
--add が必要です。 EF Core 11 で追加されました。 |
一般的なオプションは、上記のとおりです。
Warning
移行引数は、コマンドの完了後にデータベースが存在する必要がある状態を指定します。 データベースが現在新しい移行中の場合、コマンドは、 Down 操作を実行することで、ターゲットより新しい移行をすべて元に戻します。 古い 1 つの移行は順を追って適用されません。
次の例では、データベースを指定された移行に更新します。 1 つ目は移行名を使用し、2 つ目は、移行 ID と指定された接続を使用します。
dotnet ef database update InitialCreate
dotnet ef database update 20180904195021_InitialCreate --connection your_connection_string
次の例では、新しい移行を作成し、1 つの手順でデータベースに適用します。
dotnet ef database update InitialCreate --add
dotnet ef database update AddProducts --add --output-dir Migrations/Products --namespace MyApp.Migrations
dotnet ef dbcontext info
DbContext 型に関する情報を取得します。
一般的なオプションは、上記のとおりです。
dotnet ef dbcontext list
使用可能な DbContext 型を一覧表示します。
一般的なオプションは、上記のとおりです。
dotnet ef dbcontext optimize
DbContextによって使用されるモデルのコンパイル済みバージョンを生成し、クエリをプリコンパイルします。
詳細については、「コンパイル済みモデル」を参照してください。
Options:
| Option | Short | Description |
|---|---|---|
--output-dir <PATH> |
-o |
ファイルを格納するディレクトリ。 パスは、プロジェクト ディレクトリに対する相対パスです。 |
--namespace <NAMESPACE> |
-n |
生成されるすべてのクラスに使用する名前空間。 既定値は、ルート名前空間、および出力ディレクトリと CompiledModels から生成されます。 |
--suffix <SUFFIX> |
生成されたすべてのファイルの名前にアタッチするサフィックス。 たとえば、 .g を使用して、これらのファイルに生成されたコードが含まれていることを示す場合があります |
|
--no-scaffold |
コンパイル済みモデルを生成しないでください。 これは、コンパイル済みモデルが既に生成されている場合に使用されます。 | |
--precompile-queries |
プリコンパイル済みクエリを生成します。 これは、ターゲット プロジェクトにクエリが含まれている場合に NativeAOT コンパイルに必要です | |
--nativeaot |
NativeAOT コンパイルとプリコンパイル済みクエリに必要なコンパイル済みモデルで追加のコードを生成する |
Note
NativeAOT のサポートとプリコンパイル済みクエリは、EF 9 では試験段階と見なされ、次のリリースで大幅に変更される可能性があります。
一般的なオプションは、上記のとおりです。
次の例では、既定の設定を使用し、プロジェクト内に DbContext が 1 つしかない場合に機能します。
dotnet ef dbcontext optimize
次の例では、指定された名前を持つコンテキストに対してモデルを最適化し、それを個別のフォルダーと名前空間に配置します。
dotnet ef dbcontext optimize -o Models -n BlogModels -c BlogContext
dotnet ef dbcontext scaffold
DbContext のコードとデータベースのエンティティ型を生成します。 このコマンドでエンティティ型を生成するには、データ テーブルに主キーが含まれている必要があります。
Arguments:
| Argument | Description |
|---|---|
<CONNECTION> |
データベースへの接続文字列。 ASP.NET Core 2.x プロジェクトの場合、値を、"name=<接続文字列の名前>" にすることができます。 その場合、名前は、プロジェクト用に設定された構成ソースから取得されます。 |
<PROVIDER> |
使用するプロバイダー。 通常、これは、NuGet パッケージの名前です (例: Microsoft.EntityFrameworkCore.SqlServer)。 |
Options:
| Option | Short | Description |
|---|---|---|
--data-annotations |
-d |
属性を使用してモデルを構成します (可能な場合)。 このオプションを省略すると、fluent API のみが使用されます。 |
--context <NAME> |
-c |
生成する DbContext クラスの名前。 |
--context-dir <PATH> |
DbContext クラス ファイルを格納するディレクトリ。 パスは、プロジェクト ディレクトリに対する相対パスです。 名前空間は、フォルダー名から派生します。 |
|
--context-namespace <NAMESPACE> |
生成される DbContext クラスに使用する名前空間。 注: --namespace をオーバーライドします。 |
|
--force |
-f |
既存のファイルを上書きします。 |
--output-dir <PATH> |
-o |
エンティティ クラス ファイルを格納するディレクトリ。 パスは、プロジェクト ディレクトリに対する相対パスです。 |
--namespace <NAMESPACE> |
-n |
生成されるすべてのクラスに使用する名前空間。 既定値は、ルート名前空間と出力ディレクトリから生成されます。 |
--schema <SCHEMA_NAME>... |
エンティティ型を生成するテーブルとビューのスキーマ。 複数のスキーマを指定するには、それぞれについて --schema を繰り返します。 このオプションを省略すると、すべてのスキーマが含まれます。 このオプションを使うと、--table を使用して明示的に含まれていない場合でも、スキーマ内のすべてのテーブルとビューがモデルに含まれます。 |
|
--table <TABLE_NAME>... |
-t |
エンティティ型を生成するテーブルとビュー。 複数のテーブルを指定するには、それぞれについて -t または --table を繰り返します。 特定のスキーマのテーブルまたはビューは、"schema.table" または "schema.view" の形式を使って含めることができます。 このオプションを省略すると、すべてのテーブルとビューが含まれます。 |
--use-database-names |
テーブル、ビュー、シーケンス、および列名は、データベースに示されるとおりに使用します。 このオプションを省略すると、データベース名が、C# の名前スタイル規則により厳密に準拠するように変更されます。 | |
--no-onconfiguring |
生成された OnConfiguring クラスの DbContext メソッドの生成を抑制します。 |
|
--no-pluralize |
pluralizer を使用しません。 |
一般的なオプションは、上記のとおりです。
次の例では、すべてのスキーマとテーブルをスキャフォールディングし、新しいファイルを Models フォルダーに格納します。
dotnet ef dbcontext scaffold "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -o Models
次の例では、選択したテーブルのみをスキャフォールディングし、指定した名前と名前空間を持つ個別のフォルダーにコンテキストを作成します。
dotnet ef dbcontext scaffold "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -o Models -t Blog -t Post --context-dir Context -c BlogContext --context-namespace New.Namespace
次の例では、Secret Manager ツールを使用して設定されたプロジェクトの構成から接続文字列を読み取ります。
dotnet user-secrets set ConnectionStrings:Blogging "Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=Blogging"
dotnet ef dbcontext scaffold Name=ConnectionStrings:Blogging Microsoft.EntityFrameworkCore.SqlServer
次の例では、OnConfiguring メソッドのスキャフォールディングをスキップします。 これは、クラスの外部で DbContext を構成する場合に便利です。 たとえば、ASP.NET Core アプリでは通常、Startup.ConfigureServices でこれを構成します。
dotnet ef dbcontext scaffold "Server=(localdb)\mssqllocaldb;Database=Blogging;Integrated Security=true;" Microsoft.EntityFrameworkCore.SqlServer --no-onconfiguring
dotnet ef dbcontext script
SQL スクリプトを DbContext から生成します。 すべての移行をバイパスします。
Options:
| Option | Short | Description |
|---|---|---|
--output <FILE> |
-o |
結果の書き込み先となるファイル。 |
一般的なオプションは、上記のとおりです。
dotnet ef migrations add
新しい移行を追加します。
Arguments:
| Argument | Description |
|---|---|
<NAME> |
移行の名前。 |
Options:
| Option | Short | Description |
|---|---|---|
--output-dir <PATH> |
-o |
ファイルの出力に使用するディレクトリ。 パスは、ターゲット プロジェクト ディレクトリに対する相対パスです。 既定値は "Migrations" です。 |
--namespace <NAMESPACE> |
-n |
生成されるクラスに使用する名前空間。 既定値は、出力ディレクトリから生成されます。 |
一般的なオプションは、上記のとおりです。
dotnet ef migrations bundle
データベースを更新するための実行可能ファイルを作成します。
Options:
| Option | Short | Description |
|---|---|---|
--output <FILE> |
-o |
作成する実行可能ファイルのパス。 |
--force |
-f |
既存のファイルを上書きします。 |
--self-contained |
.NET ランタイムもバンドルして、それをマシンにインストールする必要がないようにします。 | |
--target-runtime <RUNTIME_IDENTIFIER> |
-r |
バンドルするターゲット ランタイム。 |
一般的なオプションは、上記のとおりです。
dotnet ef migrations has-pending-model-changes
Note
このコマンドは、EF Core 8.0 で追加されました。
前回の移行以降にモデルに変更が加えられたかどうかを確認します。
Options:
一般的なオプションは、上記のとおりです。
dotnet ef migrations list
使用可能な移行を一覧表示します。
Options:
| Option | Description |
|---|---|
--connection <CONNECTION> |
データベースへの接続文字列。 既定値は、AddDbContext または OnConfiguring で指定された文字列です。 |
--no-connect |
データベースに接続しません。 |
一般的なオプションは、上記のとおりです。
dotnet ef migrations remove
最後の移行を削除して、最新の移行のために行われたコード変更をロールバックします。
Options:
| Option | Short | Description |
|---|---|---|
--force |
-f |
最後の移行を元に戻して、最新の移行のために行われたコードおよびデータベース変更をロールバックします。 データベースへの接続中にエラーが発生した場合、コードの変更のみをロールバックします。 |
--connection <CONNECTION> |
データベースへの接続文字列。 既定値は、AddDbContext または OnConfiguring で指定された文字列です。 EF Core 11 で追加されました。 |
|
--offline |
データベースに接続せずに移行を削除します。 EF Core 11 で追加されました。 |
一般的なオプションは、上記のとおりです。
Note
--offlineオプションと--forceオプションを一緒に使用することはできません。これは、--forceを元に戻す前に、データベース接続で移行が適用されているかどうかを確認する必要があるためです。
dotnet ef migrations script
移行から SQL スクリプトを生成します。
--output指定されていない場合、コマンドはスクリプトを標準出力に書き込みます。
Arguments:
| Argument | Description |
|---|---|
<FROM> |
開始移行。 移行は、名前または ID で識別できます。 数値 0 は特殊なケースで、"最初の移行の前" を意味します。 既定値は 0 です。 |
<TO> |
終了移行。 既定値は、最後の移行です。 |
Options:
| Option | Short | Description |
|---|---|---|
--output <FILE> |
-o |
スクリプトの書き込み先のファイル。 |
--idempotent |
-i |
任意の移行時にデータベースで使用できるスクリプトを生成します。 |
--no-transactions |
SQL トランザクション ステートメントを生成しません。 |
一般的なオプションは、上記のとおりです。
次の例では、InitialCreate 移行用のスクリプトを作成します。
dotnet ef migrations script 0 InitialCreate
次の例では、ID InitialCreate 移行後のすべての移行のスクリプトを生成します。
dotnet ef migrations script 20180904195021_InitialCreate
構成ファイル
Note
この機能は、EF Core 11 で導入されました。
EF Core 11 以降では、 dotnet ef は JSON 構成ファイルから既定のオプション値を読み込むことができます。 これにより、複数の呼び出しで同じコマンド ライン オプションを繰り返す必要が減ります。
ファイルの場所と検出
dotnet-ef.json ディレクトリ内に .config という名前のファイルを配置します。
<repository root>/
└── .config/
└── dotnet-ef.json
dotnet ef実行すると、現在の作業ディレクトリからディレクトリ ツリーがウォークアップされ、検出された最初の.config/dotnet-ef.json ファイルが使用されます。 つまり、リポジトリのルートにファイルを配置でき、任意のサブディレクトリから使用されます。
サポートされているプロパティ
構成ファイルは、次の省略可能なプロパティを持つ JSON オブジェクトです。
{
"project": "src/App.Infrastructure",
"startupProject": "src/App.Api",
"framework": "net11.0",
"configuration": "Debug",
"context": "AppDbContext",
"runtime": "win-x64",
"verbose": true,
"noColor": false,
"prefixOutput": false
}
| 財産 | タイプ | Description |
|---|---|---|
project |
文字列 | ターゲット プロジェクト フォルダーへの相対パスまたは絶対パス。 相対パスは、ファイルを含む .config ディレクトリの親を基準にして解決されます。 |
startupProject |
文字列 | スタートアップ プロジェクト フォルダーへの相対パスまたは絶対パス。 相対パスは、ファイルを含む .config ディレクトリの親を基準にして解決されます。 |
framework |
文字列 | ターゲット フレームワーク用モニカー。 |
configuration |
文字列 | ビルド構成 (Debug や Release など)。 |
context |
文字列 | 使用する DbContext クラス。 クラス名のみ、または名前空間で完全修飾された名前。 |
runtime |
文字列 | パッケージを復元するターゲット ランタイムの識別子。 ランタイム ID (RID) の一覧については、RID カタログに関するページをご覧ください。 |
verbose |
boolean | 詳細出力を有効にします。 |
noColor |
boolean | 色付きのコンソール出力を無効にします。 |
prefixOutput |
boolean | 出力行に重大度レベルのプレフィックスを付けます。 |
すべてのプロパティは省略可能です。 必要なプロパティのみを含めます。
Note
明示的なコマンド ライン オプションは、常に構成ファイルの値よりも優先されます。
その他のリソース
.NET