Entity Framework Core ツールリファレンス-.NET CLIEntity Framework Core tools reference - .NET 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 を使用している場合は、代わりにパッケージマネージャーコンソールツールを使用することをお勧めします。If you're using Visual Studio, we recommend the Package Manager Console tools instead:

  • パッケージマネージャーコンソールで選択した現在のプロジェクトと自動的に連動します。ディレクトリを手動で切り替える必要はありません。They automatically work with the current project selected in the Package Manager Console without requiring that you manually switch directories.
  • コマンドが完了すると、コマンドによって生成されたファイルが自動的に開かれます。They automatically open files generated by a command after the command is completed.

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

インストール手順は、プロジェクトの種類とバージョンによって異なります。The installation procedure depends on project type and version:

  • EF Core 3.xEF Core 3.x
  • ASP.NET Core バージョン2.1 以降ASP.NET Core version 2.1 and later
  • EF Core 2.xEF Core 2.x
  • EF Core 1.xEF Core 1.x

EF Core 3.xEF Core 3.x

  • dotnet ef は、グローバルまたはローカルのツールとしてインストールする必要があります。dotnet ef must be installed as a global or local tool. ほとんどの開発者は、次のコマンドを使用して、dotnet ef をグローバルツールとしてインストールします。Most developers will install dotnet ef as a global tool with the following command:

    dotnet tool install --global dotnet-ef

    dotnet ef をローカルツールとして使用することもできます。You can also use dotnet ef as local tool. ローカルツールとして使用するには、ツールマニフェストファイルを使用して、ツールの依存関係として宣言するプロジェクトの依存関係を復元します。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.

  • .NET Core SDK 3.0をインストールします。Install the .NET Core SDK 3.0. 最新バージョンの Visual Studio がインストールされている場合でも、SDK をインストールする必要があります。The SDK has to be installed even if you have the latest version of Visual Studio.

  • 最新の Microsoft.EntityFrameworkCore.Design パッケージをインストールします。Install the latest Microsoft.EntityFrameworkCore.Design package.

    dotnet add package Microsoft.EntityFrameworkCore.Design

ASP.NET Core 2.1 以降ASP.NET Core 2.1+

  • 現在の.NET Core SDKをインストールします。Install the current .NET Core SDK. SDK は、Visual Studio 2017 の最新バージョンがある場合でもインストールする必要があります。The SDK has to be installed even if you have the latest version of Visual Studio 2017.

    Microsoft.EntityFrameworkCore.Design パッケージはAspNetCore メタパッケージに含まれているため、これは ASP.NET Core 2.1 以降に必要なことです。This is all that is needed for ASP.NET Core 2.1+ because the Microsoft.EntityFrameworkCore.Design package is included in the Microsoft.AspNetCore.App metapackage.

EF Core 2.x (ASP.NET Core ではありません)EF Core 2.x (not ASP.NET Core)

dotnet ef のコマンドは .NET Core SDK に含まれていますが、Microsoft.EntityFrameworkCore.Design パッケージをインストールするために必要なコマンドを有効にします。The dotnet ef commands are included in the .NET Core SDK, but to enable the commands you have to install the Microsoft.EntityFrameworkCore.Design package.

  • 現在の.NET Core SDKをインストールします。Install the current .NET Core SDK. 最新バージョンの Visual Studio がインストールされている場合でも、SDK をインストールする必要があります。The SDK has to be installed even if you have the latest version of Visual Studio.

  • 最新の安定した Microsoft.EntityFrameworkCore.Design パッケージをインストールします。Install the latest stable Microsoft.EntityFrameworkCore.Design package.

    dotnet add package Microsoft.EntityFrameworkCore.Design

EF Core 1.xEF Core 1.x

  • .NET Core SDK バージョン2.1.200 をインストールします。Install the .NET Core SDK version 2.1.200. 以降のバージョンは、EF Core 1.0 および1.1 の CLI ツールと互換性がありません。Later versions are not compatible with CLI tools for EF Core 1.0 and 1.1.

  • 2.1.200 SDK バージョンを使用するようにアプリケーションを構成します。そのためには、グローバルな jsonファイルを変更します。Configure the application to use the 2.1.200 SDK version by modifying its global.json file. 通常、このファイルはソリューションディレクトリ (プロジェクトの1つ上) に含まれています。This file is normally included in the solution directory (one above the project).

  • プロジェクトファイルを編集し、DotNetCliToolReference 項目として Microsoft.EntityFrameworkCore.Tools.DotNet を追加します。Edit the project file and add Microsoft.EntityFrameworkCore.Tools.DotNet as a DotNetCliToolReference item. 最新の1.x バージョンを指定します。次に例を示します。1.1.6.Specify the latest 1.x version, for example: 1.1.6. このセクションの最後にあるプロジェクトファイルの例を参照してください。See the project file example at the end of this section.

  • Microsoft.EntityFrameworkCore.Design パッケージの最新バージョン1.x をインストールします。次に例を示します。Install the latest 1.x version of the Microsoft.EntityFrameworkCore.Design package, for example:

    dotnet add package Microsoft.EntityFrameworkCore.Design -v 1.1.6

    両方のパッケージ参照を追加すると、プロジェクトファイルは次のようになります。With both package references added, the project file looks something like this:

    <Project Sdk="Microsoft.NET.Sdk">
        <PackageReference Include="Microsoft.EntityFrameworkCore.Design"
                           PrivateAssets="All" />
         <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet"
                                Version="1.1.6" />

    PrivateAssets="All" のパッケージ参照が、このプロジェクトを参照するプロジェクトに公開されていません。A package reference with PrivateAssets="All" isn't exposed to projects that reference this project. この制限は、開発時にのみ使用されるパッケージに特に役立ちます。This restriction is especially useful for packages that are typically only used during development.

インストールの確認Verify installation

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

dotnet restore
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.>

ツールの使用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

OPTIONOption 説明Description
--json JSON 出力を表示します。Show JSON output.
-c --context <DBCONTEXT> 使用する 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.
-p --project <PROJECT> ターゲットプロジェクトのプロジェクトフォルダーへの相対パス。Relative path to the project folder of the target project. 既定値は現在のフォルダーです。Default value is the current folder.
-s --startup-project <PROJECT> スタートアッププロジェクトのプロジェクトフォルダーへの相対パス。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> ビルド構成。たとえば、DebugReleaseです。The 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.
-h --help ヘルプ情報を表示します。Show help information.
-v --verbose 詳細出力を表示します。Show verbose output.
--no-color 出力を色分けしません。Don't colorize output.
--prefix-output レベルのプレフィックス出力。Prefix output with level.

dotnet ef database deletedotnet ef database drop

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


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

dotnet ef database updatedotnet ef database update

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


引数Argument 説明Description
<MIGRATION> Target の移行。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.

次の例では、指定された移行にデータベースを更新します。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:

dotnet ef database update InitialCreate
dotnet ef database update 20180904195021_InitialCreate

dotnet ef dbcontext infodotnet ef dbcontext info

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

dotnet ef dbcontext listdotnet ef dbcontext list

使用できる DbContext の種類を一覧表示します。Lists available DbContext types.

dotnet ef dbcontext scaffolddotnet 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.


引数Argument 説明Description
<CONNECTION> データベースへの接続文字列。The connection string to the database. ASP.NET Core 2.x プロジェクトの場合、値は、接続文字列 > の名前を<名前にすることができます。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.SqlServer)。Typically this is the name of the NuGet package, for example: Microsoft.EntityFrameworkCore.SqlServer.


OPTIONOption 説明Description
-d-d --data-annotations 属性を使用してモデルを構成します (可能な場合)。Use attributes to configure the model (where possible). このオプションを省略した場合は、fluent API のみが使用されます。If this option is omitted, only the fluent API is used.
-c --context <NAME> 生成する DbContext クラスの名前。The name of the DbContext class to generate.
--context-dir <PATH> DbContext クラスファイルを格納するディレクトリ。The directory to put the DbContext class file in. パスでは、プロジェクト ディレクトリに対して相対的です。Paths are relative to the project directory. 名前空間は、フォルダー名から派生します。Namespaces are derived from the folder names.
-f --force 既存のファイルを上書きします。Overwrite existing files.
-o --output-dir <PATH> エンティティクラスファイルを配置するディレクトリ。The directory to put entity class files in. パスでは、プロジェクト ディレクトリに対して相対的です。Paths are relative to the project directory.
--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.
-t --table <TABLE_NAME>...--table <TABLE_NAME>... エンティティ型を生成するテーブル。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.

次の例では、すべてのスキーマとテーブルをスキャフォールディングし、新しいファイルを [モデル] フォルダーに配置します。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:

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

dotnet ef migrations adddotnet ef migrations add

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


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


OPTIONOption 説明Description
-o --output-dir <PATH> 使用するディレクトリ (およびサブ名前空間)。The directory (and sub-namespace) to use. パスでは、プロジェクト ディレクトリに対して相対的です。Paths are relative to the project directory. 既定値は「移行」です。Defaults to "Migrations".

dotnet ef migrations listdotnet ef migrations list

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

dotnet ef migrations deletedotnet ef migrations remove

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


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

dotnet ef migrations scriptdotnet ef migrations script

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


引数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.


OPTIONOption 説明Description
-o --output <FILE> スクリプトの書き込み先のファイル。The file to write the script to.
-i --idempotent すべての移行でのデータベースで使用できるスクリプトを生成します。Generate a script that can be used on a database at any migration.

次の例では、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