Entity Framework Core ツールリファレンス-.NET Core CLIEntity Framework Core tools reference - .NET Core CLI

Entity Framework Core 用のコマンドラインインターフェイス (CLI) ツールは、デザイン時の開発タスクを実行します。The command-line interface (CLI) tools for Entity Framework Core perform design-time development tasks. たとえば、既存のデータベースに基づいて、 移行を作成し、移行を適用し、モデルのコードを生成します。For example, they create migrations, apply migrations, and generate code for a model based on an existing database. コマンドは、 .NET Core SDKの一部であるクロスプラットフォームdotnetコマンドの拡張機能です。The commands are an extension to the cross-platform dotnet command, which is part of the .NET Core SDK. これらのツールは、.NET Core プロジェクトで動作します。These tools work with .NET Core projects.

Visual Studio を使用する場合は、CLI ツールの代わりに パッケージマネージャーコンソールツール を使用することを検討してください。When using Visual Studio, consider using the Package Manager Console tools in lieu of the CLI tools. パッケージマネージャーコンソールツールは、次のように自動的になります。Package Manager Console tools automatically:

  • パッケージマネージャーコンソールで選択されている現在のプロジェクトと連動します。ディレクトリを手動で切り替える必要はありません。Works with the current project selected in the Package Manager Console without requiring that you manually switch directories.
  • コマンドの完了後にコマンドによって生成されたファイルを開きます。Opens files generated by a command after the command is completed.
  • コマンド、パラメーター、プロジェクト名、コンテキストの種類、および移行名のタブ補完を提供します。Provides tab completion of commands, parameters, project names, context types, and migration names.

ツールのインストールInstalling the tools

dotnet ef は、グローバルまたはローカルのいずれかのツールとしてインストールできます。dotnet ef can be installed as either a global or local tool. ほとんどの開発者 dotnet ef は、次のコマンドを使用してをグローバルツールとしてインストールすることをお勧めします。Most developers prefer installing dotnet ef as a global tool using the following command:

dotnet tool install --global dotnet-ef

ローカルツールとして使用するには、 ツールマニフェストファイルを使用して、ツールの依存関係として宣言するプロジェクトの依存関係を復元します。To use it as a local tool, restore the dependencies of a project that declares it as a tooling dependency using a tool manifest file.

次のコマンドを使用してツールツールを更新します。Update the tool tool using the following command:

dotnet tool update --global dotnet-ef

特定のプロジェクトでツールを使用するには、その前にパッケージを追加する必要があり Microsoft.EntityFrameworkCore.Design ます。Before you can use the tools on a specific project, you'll need to add the Microsoft.EntityFrameworkCore.Design package to it.

dotnet add package Microsoft.EntityFrameworkCore.Design

インストールを確認するVerify installation

次のコマンドを実行して EF Core CLI ツールが正しくインストールされていることを確認します。Run the following commands to verify that EF Core CLI tools are correctly installed:

dotnet ef

コマンドからの出力は、使用されているツールのバージョンを識別します。The output from the command identifies the version of the tools in use:


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

Entity Framework Core .NET Command-line Tools 2.1.3-rtm-32065

<Usage documentation follows, not shown.>

ツールを更新するUpdate the tools

を使用して、 dotnet tool update --global dotnet-ef グローバルツールを利用可能な最新バージョンに更新します。Use dotnet tool update --global dotnet-ef to update the global tools to the latest available version. プロジェクトにローカルにインストールされているツールがある場合は、を使用 dotnet tool update dotnet-ef します。If you have the tools installed locally in your project use dotnet tool update dotnet-ef. コマンドにを追加して、特定のバージョンをインストールし --version <VERSION> ます。Install a specific version by appending --version <VERSION> to your command. 詳細については、dotnet tool のドキュメントの 更新 に関するセクションを参照してください。See the Update section of the dotnet tool documentation for more details.

ツールの使用Using the tools

ツールを使用する前に、スタートアッププロジェクトを作成するか、環境を設定することが必要になる場合があります。Before using the tools, you might have to create a startup project or set the environment.

ターゲットプロジェクトとスタートアッププロジェクトTarget project and startup project

これらのコマンドは、 プロジェクトスタートアッププロジェクトを参照します。The commands refer to a project and a startup project.

  • プロジェクトターゲットプロジェクトとも呼ばれます。これは、コマンドによってファイルが追加または削除されるためです。The project is also known as the target project because it's where the commands add or remove files. 既定では、現在のディレクトリ内のプロジェクトはターゲットプロジェクトです。By default, the project in the current directory is the target project. オプションを使用して、別のプロジェクトをターゲットプロジェクトとして指定でき --project ます。You can specify a different project as target project by using the --project option.

  • スタートアッププロジェクトは、ツールをビルドして実行するためのものです。The startup project is the one that the tools build and run. このツールでは、デザイン時にアプリケーションコードを実行して、プロジェクトに関する情報 (データベース接続文字列やモデルの構成など) を取得する必要があります。The tools have to execute application code at design time to get information about the project, such as the database connection string and the configuration of the model. 既定では、現在のディレクトリのプロジェクトはスタートアッププロジェクトです。By default, the project in the current directory is the startup project. オプションを使用して、別のプロジェクトをスタートアッププロジェクトとして指定でき --startup-project ます。You can specify a different project as startup project by using the --startup-project option.

多くの場合、スタートアッププロジェクトとターゲットプロジェクトは同じプロジェクトです。The startup project and target project are often the same project. 個別のプロジェクトである一般的なシナリオは、次のような場合です。A typical scenario where they are separate projects is when:

  • EF Core コンテキストとエンティティクラスは、.NET Core クラスライブラリにあります。The EF Core context and entity classes are in a .NET Core class library.
  • .NET Core コンソールアプリまたは web アプリはクラスライブラリを参照します。A .NET Core console app or web app references the class library.

また、 移行コードを EF Core コンテキストとは別のクラスライブラリに配置することもできます。It's also possible to put migrations code in a class library separate from the EF Core context.

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

CLI ツールは、.NET Core プロジェクトと .NET Framework プロジェクトで使用できます。The CLI tools work with .NET Core projects and .NET Framework projects. .NET Standard クラスライブラリに EF Core モデルがあるアプリには、.NET Core または .NET Framework プロジェクトがない可能性があります。Apps that have the EF Core model in a .NET Standard class library might not have a .NET Core or .NET Framework project. たとえば、これは Xamarin とユニバーサル Windows プラットフォームアプリに当てはまります。For example, this is true of Xamarin and Universal Windows Platform apps. このような場合は、ツールのスタートアッププロジェクトとして機能することだけを目的とした .NET Core コンソールアプリプロジェクトを作成できます。In such cases, you can create a .NET Core console app project whose only purpose is to act as startup project for the tools. プロジェクトは、実際のコードを持たないダミープロジェクトにすることができ — ます。これは、ツールのターゲットを指定するためにのみ必要です。The project can be a dummy project with no real code — it is only needed to provide a target for the tooling.

ダミープロジェクトが必要な理由Why is a dummy project required? 前述のように、ツールはデザイン時にアプリケーションコードを実行する必要があります。As mentioned earlier, the tools have to execute application code at design time. そのためには、.NET Core ランタイムを使用する必要があります。To do that, they need to use the .NET Core runtime. EF Core モデルが .NET Core または .NET Framework を対象とするプロジェクト内にある場合、EF Core ツールはプロジェクトからランタイムを借用します。When the EF Core model is in a project that targets .NET Core or .NET Framework, the EF Core tools borrow the runtime from the project. EF Core モデルが .NET Standard クラスライブラリ内にある場合は、これを行うことはできません。They can't do that if the EF Core model is in a .NET Standard class library. .NET Standard は実際の .NET 実装ではありません。これは、.NET 実装がサポートする必要のある一連の Api の仕様です。The .NET Standard is not an actual .NET implementation; it's a specification of a set of APIs that .NET implementations must support. したがって、EF Core ツールでアプリケーションコードを実行するために .NET Standard は十分ではありません。Therefore .NET Standard is not sufficient for the EF Core tools to execute application code. スタートアッププロジェクトとして使用するために作成するダミープロジェクトは、ツールが .NET Standard クラスライブラリを読み込むことができる具象ターゲットプラットフォームを提供します。The dummy project you create to use as startup project provides a concrete target platform into which the tools can load the .NET Standard class library.

ASP.NET Core 環境ASP.NET Core environment

ASP.NET Core プロジェクトの環境を指定するには、コマンドを実行する前に ASPNETCORE_ENVIRONMENT 環境変数を設定します。To specify the environment for ASP.NET Core projects, set the ASPNETCORE_ENVIRONMENT environment variable before running commands.

共通オプションCommon options

オプションOption ShortShort 説明Description
--json JSON 出力を表示します。Show JSON output.
--context <DBCONTEXT> -c 使用する DbContext クラス。The DbContext class to use. クラス名のみ、または名前空間で完全修飾されています。Class name only or fully qualified with namespaces. このオプションを省略した場合、EF Core によってコンテキストクラスが検索されます。If this option is omitted, EF Core will find the context class. 複数のコンテキストクラスがある場合は、このオプションが必要です。If there are multiple context classes, this option is required.
--project <PROJECT> -p ターゲットプロジェクトのプロジェクトフォルダーへの相対パス。Relative path to the project folder of the target project. 既定値は現在のフォルダーです。Default value is the current folder.
--startup-project <PROJECT> -s スタートアッププロジェクトのプロジェクトフォルダーへの相対パス。Relative path to the project folder of the startup project. 既定値は現在のフォルダーです。Default value is the current folder.
--framework <FRAMEWORK> ターゲットフレームワークターゲットフレームワークモニカーThe Target Framework Moniker for the target framework. プロジェクトファイルで複数のターゲットフレームワークを指定し、そのうちの1つを選択する場合は、を使用します。Use when the project file specifies multiple target frameworks, and you want to select one of them.
--configuration <CONFIGURATION> ビルド構成 (たとえば、 Debug または) ReleaseThe build configuration, for example: Debug or Release.
--runtime <IDENTIFIER> パッケージを復元する対象のランタイムの識別子。The identifier of the target runtime to restore packages for. ランタイム ID (RID) の一覧については、RID カタログに関するページをご覧ください。For a list of Runtime Identifiers (RIDs), see the RID catalog.
--no-build プロジェクトをビルドしません。Don't build the project. ビルドが最新の状態である場合に使用することを目的としています。Intended to be used when the build is up-to-date.
--help -h ヘルプ情報を表示します。Show help information.
--verbose -v 詳細出力を表示します。Show verbose output.
--no-color 出力を色分けしません。Don't colorize output.
--prefix-output レベルのプレフィックス出力。Prefix output with level.

EF Core 5.0 以降では、追加の引数はアプリケーションに渡されます。Starting in EF Core 5.0, any additional arguments are passed to the application.

dotnet ef データベースの削除dotnet ef database drop

データベースを削除します。Drops the database.

オプション:Options:

オプションOption ShortShort 説明Description
--force -f 確認しないでください。Don't confirm.
--dry-run 削除するデータベースを表示しますが、削除はしません。Show which database would be dropped, but don't drop it.

一般的なオプションは上記のとおりです。The common options are listed above.

dotnet ef データベースの更新dotnet ef database update

最後に移行したデータベース、または指定した移行にデータベースを更新します。Updates the database to the last migration or to a specified migration.

引数:Arguments:

引数Argument 説明Description
<MIGRATION> ターゲットの移行。The target migration. 移行は、名前または ID で識別できます。Migrations may be identified by name or by ID. 数値0は、 最初の移行の前に 特別なケースであり、すべての移行が元に戻されます。The number 0 is a special case that means before the first migration and causes all migrations to be reverted. 移行が指定されていない場合、コマンドは既定で最後の移行になります。If no migration is specified, the command defaults to the last migration.

オプション:Options:

オプションOption 説明Description
--connection <CONNECTION> データベースへの接続文字列。The connection string to the database. 既定値は、またはで指定されたもの AddDbContext OnConfiguring です。Defaults to the one specified in AddDbContext or OnConfiguring. EF Core 5.0 で追加されました。Added in EF Core 5.0.

一般的なオプションは上記のとおりです。The common options are listed above.

次の例では、指定された移行にデータベースを更新します。The following examples update the database to a specified migration. 最初のは移行名を使用し、2つ目のは移行 ID と指定された接続を使用します。The first uses the migration name and the second uses the migration ID and a specified connection:

dotnet ef database update InitialCreate
dotnet ef database update 20180904195021_InitialCreate --connection your_connection_string

dotnet ef dbcontext 情報dotnet ef dbcontext info

型に関する情報を取得し DbContext ます。Gets information about a DbContext type.

一般的なオプションは上記のとおりです。The common options are listed above.

dotnet ef dbcontext の一覧dotnet ef dbcontext list

使用可能な種類が一覧表示さ DbContext れます。Lists available DbContext types.

一般的なオプションは上記のとおりです。The common options are listed above.

dotnet ef dbcontext スキャフォールディングdotnet ef dbcontext scaffold

DbContextデータベースのおよびエンティティ型のコードを生成します。Generates code for a DbContext and entity types for a database. このコマンドでエンティティ型を生成するには、データベーステーブルに主キーが必要です。In order for this command to generate an entity type, the database table must have a primary key.

引数:Arguments:

引数Argument 説明Description
<CONNECTION> データベースへの接続文字列。The connection string to the database. ASP.NET Core 2.x プロジェクトの場合、値には*name = <name of connection string> *を指定できます。For ASP.NET Core 2.x projects, the value can be name=<name of connection string>. その場合、プロジェクト用に設定されている構成ソースから名前を取得します。In that case the name comes from the configuration sources that are set up for the project.
<PROVIDER> 使用するプロバイダー。The provider to use. 通常、これは NuGet パッケージの名前です (例:) Microsoft.EntityFrameworkCore.SqlServerTypically this is the name of the NuGet package, for example: Microsoft.EntityFrameworkCore.SqlServer.

オプション:Options:

オプションOption ShortShort 説明Description
--data-annotations -d 属性を使用してモデルを構成します (可能な場合)。Use attributes to configure the model (where possible). このオプションを省略した場合は、fluent API のみが使用されます。If this option is omitted, only the fluent API is used.
--context <NAME> -c DbContext生成するクラスの名前。The name of the DbContext class to generate.
--context-dir <PATH> クラスファイルを格納するディレクトリ DbContextThe directory to put the DbContext class file in. パスは、プロジェクトディレクトリに対する相対パスです。Paths are relative to the project directory. 名前空間は、フォルダー名から派生します。Namespaces are derived from the folder names.
--context-namespace <NAMESPACE> 生成されたクラスに使用する名前空間 DbContextThe namespace to use for the generated DbContext class. 注: はオーバーライドさ --namespace れます。Note: overrides --namespace. EF Core 5.0 で追加されました。Added in EF Core 5.0.
--force -f 既存のファイルを上書きします。Overwrite existing files.
--output-dir <PATH> -o エンティティクラスファイルを配置するディレクトリ。The directory to put entity class files in. パスは、プロジェクトディレクトリに対する相対パスです。Paths are relative to the project directory.
--namespace <NAMESPACE> -n 生成されたすべてのクラスに使用する名前空間。The namespace to use for all generated classes. 既定値は、ルート名前空間と出力ディレクトリから生成されます。Defaults to generated from the root namespace and the output directory. EF Core 5.0 で追加されました。Added in EF Core 5.0.
--schema <SCHEMA_NAME>... エンティティ型を生成するテーブルのスキーマ。The schemas of tables to generate entity types for. 複数のスキーマを指定するには、それぞれのスキーマを繰り返し --schema ます。To specify multiple schemas, repeat --schema for each one. このオプションを省略した場合、すべてのスキーマが含まれます。If this option is omitted, all schemas are included.
--table <TABLE_NAME>...--table <TABLE_NAME>... -t エンティティ型を生成するテーブル。The tables to generate entity types for. 複数のテーブルを指定するに -t は、 --table 1 つのテーブルに対してまたはを繰り返します。To specify multiple tables, repeat -t or --table for each one. このオプションを省略した場合、すべてのテーブルが含まれます。If this option is omitted, all tables are included.
--use-database-names テーブル名と列名は、データベースに表示されるとおりに使用します。Use table and column names exactly as they appear in the database. このオプションを省略した場合、データベース名は、C# の名前のスタイル規則により厳密に準拠するように変更されます。If this option is omitted, database names are changed to more closely conform to C# name style conventions.
--no-onconfiguring 生成されたクラスのメソッドの生成を抑制し OnConfiguring DbContext ます。Suppresses generation of the OnConfiguring method in the generated DbContext class. EF Core 5.0 で追加されました。Added in EF Core 5.0.
--no-pluralize プルーラライザーは使用しないでください。Don't use the pluralizer. EF Core 5.0 に追加されましたAdded in EF Core 5.0

一般的なオプションは上記のとおりです。The common options are listed above.

次の例では、すべてのスキーマとテーブルをスキャフォールディングし、新しいファイルを [ モデル ] フォルダーに配置します。The following example scaffolds all schemas and tables and puts the new files in the Models folder.

dotnet ef dbcontext scaffold "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -o Models

次の例では、選択したテーブルのみをスキャフォールディングし、指定された名前と名前空間を持つ別のフォルダーにコンテキストを作成します。The following example scaffolds only selected tables and creates the context in a separate folder with a specified name and namespace:

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

dotnet ef dbcontext スクリプトdotnet ef dbcontext script

DbContext から SQL スクリプトを生成します。Generates a SQL script from the DbContext. すべての移行をバイパスします。Bypasses any migrations. EF Core 3.0 で追加されました。Added in EF Core 3.0.

オプション:Options:

オプションOption ShortShort 説明Description
--output <FILE> -o 結果の書き込み先のファイル。The file to write the result to.

一般的なオプションは上記のとおりです。The common options are listed above.

dotnet ef 移行の追加dotnet ef migrations add

新しい移行を追加します。Adds a new migration.

引数:Arguments:

引数Argument 説明Description
<NAME> 移行の名前。The name of the migration.

オプション:Options:

オプションOption ShortShort 説明Description
--output-dir <PATH> -o ファイルの出力に使用するディレクトリ。The directory use to output the files. パスは、ターゲットプロジェクトディレクトリに対する相対パスです。Paths are relative to the target project directory. 既定値は "移行" です。Defaults to "Migrations".
--namespace <NAMESPACE> -n 生成されたクラスに使用する名前空間。The namespace to use for the generated classes. 既定値は、出力ディレクトリから生成されます。Defaults to generated from the output directory. EF Core 5.0 で追加されました。Added in EF Core 5.0.

一般的なオプションは上記のとおりです。The common options are listed above.

dotnet ef 移行リストdotnet ef migrations list

使用可能な移行を一覧表示します。Lists available migrations.

オプション:Options:

オプションOption 説明Description
--connection <CONNECTION> データベースへの接続文字列。The connection string to the database. 既定値は、AddDbContext または OnConfiguring で指定されたものです。Defaults to the one specified in AddDbContext or OnConfiguring. EF Core 5.0 で追加されました。Added in EF Core 5.0.
--no-connect データベースに接続しないでください。Don't connect to the database. EF Core 5.0 で追加されました。Added in EF Core 5.0.

一般的なオプションは上記のとおりです。The common options are listed above.

dotnet ef 移行の削除dotnet ef migrations remove

最後の移行を削除します (移行のために実行されたコード変更をロールバックします)。Removes the last migration (rolls back the code changes that were done for the migration).

オプション:Options:

オプションOption ShortShort 説明Description
--force -f 移行を元に戻します (データベースに適用された変更をロールバックします)。Revert the migration (roll back the changes that were applied to the database).

一般的なオプションは上記のとおりです。The common options are listed above.

dotnet ef 移行スクリプトdotnet ef migrations script

移行から SQL スクリプトを生成します。Generates a SQL script from migrations.

引数:Arguments:

引数Argument 説明Description
<FROM> 移行を開始しています。The starting migration. 移行は、名前または ID で識別できます。Migrations may be identified by name or by ID. 数値0は、 最初の移行の前に特別なケースです。The number 0 is a special case that means before the first migration. 既定値は 0 です。Defaults to 0.
<TO> 移行を終了しています。The ending migration. 既定では、最後の移行になります。Defaults to the last migration.

オプション:Options:

オプションOption ShortShort 説明Description
--output <FILE> -o スクリプトの書き込み先のファイル。The file to write the script to.
--idempotent -i 任意の移行時にデータベースで使用できるスクリプトを生成します。Generate a script that can be used on a database at any migration.
--no-transactions SQL トランザクションステートメントを生成しません。Don't generate SQL transaction statements. EF Core 5.0 で追加されました。Added in EF Core 5.0.

一般的なオプションは上記のとおりです。The common options are listed above.

次の例では、InitialCreate 移行用のスクリプトを作成します。The following example creates a script for the InitialCreate migration:

dotnet ef migrations script 0 InitialCreate

次の例では、InitialCreate 移行後にすべての移行用のスクリプトを作成します。The following example creates a script for all migrations after the InitialCreate migration.

dotnet ef migrations script 20180904195021_InitialCreate

その他の資料Additional resources