Entity Framework Core ツールのリファレンス - Visual Studio でパッケージ マネージャー コンソールEntity Framework Core tools reference - Package Manager Console in Visual Studio

Entity Framework Core のパッケージ マネージャー コンソール (PMC) ツールでは、デザイン時開発タスクを実行します。The Package Manager Console (PMC) 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. コマンドは、Visual Studio を使用して内部で実行、パッケージ マネージャー コンソールします。The commands run inside of Visual Studio using the Package Manager Console. これらのツールは、.NET Framework プロジェクトと .NET Core プロジェクトの両方に使えます。These tools work with both .NET Framework and .NET Core projects.

Visual Studio を使用していないかどうか、お勧め、 EF Core コマンド ライン ツール代わりにします。If you aren't using Visual Studio, we recommend the EF Core Command-line Tools instead. CLI ツールは、クロス プラットフォームと、コマンド プロンプト内で実行されます。The CLI tools are cross-platform and run inside a command prompt.

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

インストールして、ツールを更新する手順は、ASP.NET Core 2.1 以降と以前のバージョンまたはその他のプロジェクトの種類によって異なります。The procedures for installing and updating the tools differ between ASP.NET Core 2.1+ and earlier versions or other project types.

ASP.NET Core 2.1 以降のバージョンASP.NET Core version 2.1 and later

ユーザーがためにで、ツールは、ASP.NET Core 2.1 以降のプロジェクトに自動的に含め、Microsoft.EntityFrameworkCore.Toolsにパッケージが含まれる、 Microsoft.AspNetCore.App メタパッケージします。The tools are automatically included in an ASP.NET Core 2.1+ project because the Microsoft.EntityFrameworkCore.Tools package is included in the Microsoft.AspNetCore.App metapackage.

そのため、ツールをインストールすることが何もする必要はありませんを行うこと。Therefore, you don't have to do anything to install the tools, but you do have to:

  • 新しいプロジェクトのツールを使用する前にパッケージを復元します。Restore packages before using the tools in a new project.
  • 新しいバージョンにツールを更新するパッケージをインストールします。Install a package to update the tools to a newer version.

ツールの最新バージョンを取得していることを確認するには、次の手順を実行することお勧めします。To make sure that you're getting the latest version of the tools, we recommend that you also do the following step:

  • 編集、 .csprojファイルを開き、最新バージョンを指定する行を追加、 Microsoft.EntityFrameworkCore.Toolsパッケージ。Edit your .csproj file and add a line specifying the latest version of the Microsoft.EntityFrameworkCore.Tools package. たとえば、 .csprojファイルを含めることができます、ItemGroup次のようにします。For example, the .csproj file might include an ItemGroup that looks like this:

      <PackageReference Include="Microsoft.AspNetCore.App" />
      <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.1.3" />
      <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.1.1" />

次の例のようなメッセージが表示された場合は、ツールを更新します。Update the tools when you get a message like the following example:

EF Core ツールのバージョン '2.1.1-rtm-30846' は、'2.1.3-rtm-32065' ランタイムのより古いです。The EF Core tools version '2.1.1-rtm-30846' is older than that of the runtime '2.1.3-rtm-32065'. 最新の機能とバグ修正するためのツールを更新します。Update the tools for the latest features and bug fixes.

ツールの更新。To update the tools:

  • 最新の .NET Core SDK をインストールします。Install the latest .NET Core SDK.
  • Visual Studio を最新バージョンに更新します。Update Visual Studio to the latest version.
  • 編集、 .csprojファイルの最新のツール パッケージにパッケージ参照が含まれるように前述のようにします。Edit the .csproj file so that it includes a package reference to the latest tools package, as shown earlier.

他のバージョンおよびプロジェクトの種類Other versions and project types

次のコマンドを実行して、パッケージ マネージャー コンソールのツールをインストールパッケージ マネージャー コンソール:Install the Package Manager Console tools by running the following command in Package Manager Console:

Install-Package Microsoft.EntityFrameworkCore.Tools

次のコマンドを実行してツールを更新するパッケージ マネージャー コンソールします。Update the tools by running the following command in Package Manager Console.

Update-Package Microsoft.EntityFrameworkCore.Tools

インストールを確認します。Verify the installation

このコマンドを実行して、ツールがインストールされていることを確認します。Verify that the tools are installed by running this command:

Get-Help about_EntityFrameworkCore

出力は、(、しないことがわかるツールを使用しているのバージョン) を次のようになります。The output looks like this (it doesn't tell you which version of the tools you're using):

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


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

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

ツールを使用します。Using the tools

前に、ツールを使用します。Before using the tools:

  • ターゲットとスタートアップ プロジェクトの違いを理解します。Understand the difference between target and startup project.
  • .NET Standard クラス ライブラリで、ツールを使用する方法について説明します。Learn how to use the tools with .NET Standard class libraries.
  • ASP.NET Core プロジェクトでは、環境を設定します。For ASP.NET Core projects, set the environment.

ターゲットとスタートアップ プロジェクトTarget 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 Default project selected in Package Manager Console 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 Startup Project in Solution Explorer 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

パッケージ マネージャー コンソール ツールは、.NET Core または .NET Framework プロジェクトで動作します。The Package Manager Console tools work with .NET Core or .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 または .NET Framework コンソール アプリケーション プロジェクトを作成できます。In such cases, you can create a .NET Core or .NET Framework 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 または .NET Framework のランタイムを使用して、必要があります。To do that, they need to use the .NET Core or .NET Framework 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 プロジェクト用の環境を指定するには、次のように設定します。 env:ASPNETCORE_ENVIRONMENTコマンドを実行する前にします。To specify the environment for ASP.NET Core projects, set env:ASPNETCORE_ENVIRONMENT before running commands.

共通パラメーターCommon parameters

次の表は、EF Core のコマンドのすべてに共通するパラメーターを示しています。The following table shows parameters that are common to all of the EF Core commands:

パラメーターParameter 説明Description
-Context <String>-Context <String> DbContextクラスを使用します。The DbContext class to use. クラス名のみ、または名前空間を持つ完全修飾します。Class name only or fully qualified with namespaces. このパラメーターを省略した場合、EF Core は、コンテキスト クラスを検索します。If this parameter is omitted, EF Core finds the context class. 複数のコンテキスト クラスがある場合は、このパラメーターが必要です。If there are multiple context classes, this parameter is required.
-Project <String>-Project <String> ターゲットのプロジェクトです。The target project. このパラメーターを省略した場合、既定のプロジェクトパッケージ マネージャー コンソールがターゲット プロジェクトとして使用されます。If this parameter is omitted, the Default project for Package Manager Console is used as the target project.
-StartupProject <String>-StartupProject <String> スタートアップ プロジェクトです。The startup project. このパラメーターを省略した場合、スタートアップ プロジェクトソリューションのプロパティターゲット プロジェクトとして使用されます。If this parameter is omitted, the Startup project in Solution properties is used as the target project.
-Verbose-Verbose 詳細な出力を表示します。Show verbose output.

コマンドに関するヘルプ情報を表示するには、PowerShell を使用してGet-Helpコマンド。To show help information about a command, use PowerShell's Get-Help command.


コンテキスト、プロジェクト、およびスタートアップ プロジェクトのパラメーターでは、タブ拡張をサポートします。The Context, Project, and StartupProject parameters support tab-expansion.


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


パラメーターParameter 説明Description
-Name<文字列 >-Name <String> 移行の名前。The name of the migration. 位置指定パラメーターは、これが必要です。This is a positional parameter and is required.
-OutputDir<文字列 >-OutputDir <String> 使用するディレクトリ (およびサブ名前空間)。The directory (and sub-namespace) to use. パスでは、ターゲット プロジェクトのディレクトリに対して相対的です。Paths are relative to the target project directory. 既定値は「移行」です。Defaults to "Migrations".


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


パラメーターParameter 説明Description
-WhatIf-WhatIf 表示するデータベースが削除されます。 は削除しないでください。Show which database would be dropped, but don't drop it.


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


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


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


コードを生成、DbContextとデータベースのエンティティ型。Generates code for a DbContext and entity types for a database. 順序でScaffold-DbContextエンティティ型を生成するには、データベース テーブルが主キーをいる必要があります。In order for Scaffold-DbContext to generate an entity type, the database table must have a primary key.


パラメーターParameter 説明Description
の接続<文字列 >-Connection <String> データベースへの接続文字列。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. 位置指定パラメーターは、これが必要です。This is a positional parameter and is required.
プロバイダー<文字列 >-Provider <String> 使用するプロバイダー。The provider to use. たとえば、NuGet パッケージの名前は、この通常:Microsoft.EntityFrameworkCore.SqlServerします。Typically this is the name of the NuGet package, for example: Microsoft.EntityFrameworkCore.SqlServer. 位置指定パラメーターは、これが必要です。This is a positional parameter and is required.
-OutputDir<文字列 >-OutputDir <String> ファイルを配置するディレクトリ。The directory to put files in. パスでは、プロジェクト ディレクトリに対して相対的です。Paths are relative to the project directory.
-ContextDir<文字列 >-ContextDir <String> 格納するディレクトリ、DbContextファイルします。The directory to put the DbContext file in. パスでは、プロジェクト ディレクトリに対して相対的です。Paths are relative to the project directory.
-Context <String>-Context <String> 名前、DbContextクラスを生成します。The name of the DbContext class to generate.
-Schemas <String[]>-Schemas <String[]> エンティティ型を生成するテーブルのスキーマです。The schemas of tables to generate entity types for. このパラメーターを省略すると、すべてのスキーマが含まれます。If this parameter is omitted, all schemas are included.
-Tables <String[]>-Tables <String[]> エンティティ型を生成するテーブル。The tables to generate entity types for. このパラメーターを省略すると、すべてのテーブルが含まれます。If this parameter is omitted, all tables are included.
-DataAnnotations-DataAnnotations 属性を使用すると、可能な限り、モデルを構成できます。Use attributes to configure the model (where possible). このパラメーターを省略した場合は、fluent API のみが使用されます。If this parameter is omitted, only the fluent API is used.
-UseDatabaseNames-UseDatabaseNames データベースに表示されているとおりに、テーブルおよび列名を使用します。Use table and column names exactly as they appear in the database. このパラメーターを省略すると、データベース名は、c# 名前表記規則をより厳密に準拠するように変更されます。If this parameter is omitted, database names are changed to more closely conform to C# name style conventions.
-Force-Force 既存のファイルを上書きします。Overwrite existing files.


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

選択したテーブルのみをスキャフォールディングし、指定した名前の別のフォルダーにコンテキストを作成する例:Example that scaffolds only selected tables and creates the context in a separate folder with a specified name:

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


すべての変更を 1 つの選択された移行から別の選択された移行に適用される SQL スクリプトを生成します。Generates a SQL script that applies all of the changes from one selected migration to another selected migration.


パラメーターParameter 説明Description
-から<文字列 >-From <String> 開始の移行。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 <String> 終了の移行。The ending migration. 移行の最後の既定値します。Defaults to the last migration.
-べき等であります。-Idempotent すべての移行でのデータベースで使用できるスクリプトを生成します。Generate a script that can be used on a database at any migration.
-出力<文字列 >-Output <String> 結果を書き込むファイル。The file to write the result to. たとえば、アプリのランタイム ファイルが作成されると、同じフォルダーに生成された名前でファイルを作成するこのパラメーターを省略すると、: /obj/Debug/netcoreapp2.1/ghbkztfz.sql/ します。IF this parameter is omitted, the file is created with a generated name in the same folder as the app's runtime files are created, for example: /obj/Debug/netcoreapp2.1/ghbkztfz.sql/.


および出力パラメーターは、タブ拡張をサポートします。The To, From, and Output parameters support tab-expansion.

次の例では、移行の名前を使用して、InitialCreate 移行用のスクリプトを作成します。The following example creates a script for the InitialCreate migration, using the migration name.

Script-Migration -To InitialCreate

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

Script-Migration -From 20180904195021_InitialCreate


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

パラメーターParameter 説明Description
-移行<文字列 >-Migration <String> 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 Migration parameter supports tab-expansion.

次の例では、すべての移行を元に戻します。The following example reverts all migrations.

Update-Database -Migration 0

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

Update-Database -Migration InitialCreate
Update-Database -Migration 20180904195021_InitialCreate