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. クロス プラットフォーム拡張機能のコマンドは、 dotnetコマンドで、一部の.NET Core SDKします。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:

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

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.

    これは、ASP.NET Core 2.1 + ために必要なすべてのMicrosoft.EntityFrameworkCore.Designにパッケージが含まれる、 Microsoft.AspNetCore.App メタパッケージします。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. SDK は、Visual Studio 2017 の最新バージョンがある場合でもインストールする必要があります。The SDK has to be installed even if you have the latest version of Visual Studio 2017.

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

    dotnet add package Microsoft.EntityFrameworkCore.Design
    

EF Core 1.x へEF 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.

  • 変更することで、SDK のバージョンを使用して、2.1.200 にアプリケーションを構成、 global.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).

  • プロジェクト ファイルを編集および追加Microsoft.EntityFrameworkCore.Tools.DotNetとして、DotNetCliToolReference項目。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.

  • 最新の 1.x バージョンのインストール、Microsoft.EntityFrameworkCore.Designなどをパッケージ化します。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">
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>netcoreapp1.1</TargetFramework>
      </PropertyGroup>
      <ItemGroup>
        <PackageReference Include="Microsoft.EntityFrameworkCore.Design"
                          Version="1.1.6"
                           PrivateAssets="All" />
      </ItemGroup>
      <ItemGroup>
         <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet"
                                Version="1.1.6" />
      </ItemGroup>
    </Project>
    

    パッケージ参照を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 プラットフォーム アプリの場合は true。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. したがって .NET Standard はアプリケーション コードを実行する EF Core ツールのための十分です。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 説明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> たとえば、ビルド構成:DebugまたはReleaseします。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 データベースの削除dotnet ef database drop

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

オプション:Options:

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

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

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

引数:Arguments:

引数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 の情報dotnet ef dbcontext info

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

dotnet ef dbcontext の一覧dotnet ef dbcontext list

使用可能なDbContext型。Lists available DbContext types.

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 プロジェクトの値を指定できます名 =<接続文字列の名前 > します。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.

オプション:Options:

オプションOption 説明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ごと。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 を追加します。dotnet ef migrations add

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

引数:Arguments:

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

オプション:Options:

オプションOption 説明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 一覧dotnet ef migrations list

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

dotnet ef migrations を削除します。dotnet ef migrations remove

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

オプション:Options:

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

dotnet ef migrations スクリプト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 説明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