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. .NET Core CLI ツールはクロスプラットフォームで、コマンドプロンプト内で実行されます。The .NET Core 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

Microsoft.EntityFrameworkCore.ToolsパッケージはAspNetCore メタパッケージに含まれているので、ツールは ASP.NET Core 2.1 以降のプロジェクトに自動的に含まれます。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 ファイルには、次のようなを含めることができます。 ItemGroupFor example, the .csproj file might include an ItemGroup that looks like this:

    <ItemGroup>
      <PackageReference Include="Microsoft.AspNetCore.App" />
      <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.3" />
      <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="3.1.2" />
    </ItemGroup>
    

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

EF Core ツールバージョン ' 2.1.1-30846 ' は、ランタイム ' 2.1.3-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):


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

TOPIC
    about_EntityFrameworkCore

SHORT DESCRIPTION
    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 プラットフォームアプリに当てはまります。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. したがって、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 プロジェクトの環境を指定するには、コマンドを実行する前に 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
-コンテキスト <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.
-Args <String>-Args <String> アプリケーションに渡される引数。Arguments passed to the application. EF Core 5.0 で追加されました。Added in EF Core 5.0.
-Verbose-Verbose 詳細出力を表示します。Show verbose output.

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

ヒント

Context、Project、および StartupProject の各パラメーターでは、タブの展開がサポートされています。The Context, Project, and StartupProject parameters support tab-expansion.

移行の追加Add-Migration

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

パラメーター:Parameters:

パラメーターParameter 説明Description
-Name <String>-Name <String> 移行の名前。The name of the migration. これは位置指定パラメーターであり、必須です。This is a positional parameter and is required.
-OutputDir <String>-OutputDir <String> ファイルの出力に使用するディレクトリ。The directory use to output the files. パスは、ターゲットプロジェクトディレクトリに対する相対パスです。Paths are relative to the target project directory. 既定値は "移行" です。Defaults to "Migrations".
-名前空間 <String>-Namespace <String> 生成されたクラスに使用する名前空間。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 parameters are listed above.

Drop DatabaseDrop-Database

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

パラメーター:Parameters:

パラメーターParameter 説明Description
-WhatIf-WhatIf 削除するデータベースを表示しますが、削除はしません。Show which database would be dropped, but don't drop it.

共通パラメーターは上記のとおりです。The common parameters are listed above.

Get-DbContextGet-DbContext

使用可能な種類に関する情報を一覧表示して取得し DbContext ます。Lists and gets information about available DbContext types.

共通パラメーターは上記のとおりです。The common parameters are listed above.

取得-移行Get-Migration

使用可能な移行を一覧表示します。Lists available migrations. EF Core 5.0 で追加されました。Added in EF Core 5.0.

パラメーター:Parameters:

パラメーターParameter 説明Description
-接続 <String>-Connection <String> データベースへの接続文字列。The connection string to the database. 既定値は、AddDbContext または OnConfiguring で指定されたものです。Defaults to the one specified in AddDbContext or OnConfiguring.
-NoConnect-NoConnect データベースに接続しないでください。Don't connect to the database.

共通パラメーターは上記のとおりです。The common parameters are listed above.

Remove-MigrationRemove-Migration

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

パラメーター:Parameters:

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

共通パラメーターは上記のとおりです。The common parameters are listed above.

スキャフォールディング-DbContextScaffold-DbContext

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.

パラメーター:Parameters:

パラメーターParameter 説明Description
-接続 <String>-Connection <String> データベースへの接続文字列。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. これは位置指定パラメーターであり、必須です。This is a positional parameter and is required.
-プロバイダー <String>-Provider <String> 使用するプロバイダー。The provider to use. 通常、これは NuGet パッケージの名前です (例:) Microsoft.EntityFrameworkCore.SqlServerTypically this is the name of the NuGet package, for example: Microsoft.EntityFrameworkCore.SqlServer. これは位置指定パラメーターであり、必須です。This is a positional parameter and is required.
-OutputDir <String>-OutputDir <String> ファイルを格納するディレクトリ。The directory to put files in. パスは、プロジェクトディレクトリに対する相対パスです。Paths are relative to the project directory.
-ContextDir <String>-ContextDir <String> ファイルを格納するディレクトリ DbContextThe directory to put the DbContext file in. パスは、プロジェクトディレクトリに対する相対パスです。Paths are relative to the project directory.
-名前空間 <String>-Namespace <String> 生成されたすべてのクラスに使用する名前空間。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.
-ContextNamespace <String>-ContextNamespace <String> 生成されたクラスに使用する名前空間 DbContextThe namespace to use for the generated DbContext class. 注: はオーバーライドさ -Namespace れます。Note: overrides -Namespace. EF Core 5.0 で追加されました。Added in EF Core 5.0.
-コンテキスト <String>-Context <String> DbContext生成するクラスの名前。The name of the DbContext class to generate.
-スキーマ <String[]>-Schemas <String[]> エンティティ型を生成するテーブルのスキーマ。The schemas of tables to generate entity types for. このパラメーターを省略すると、すべてのスキーマが含まれます。If this parameter is omitted, all schemas are included.
-テーブル <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.
-NoOnConfiguring-NoOnConfiguring 生成しません DbContext.OnConfiguringDon't generate DbContext.OnConfiguring. EF Core 5.0 で追加されました。Added in EF Core 5.0.
-NoPluralize-NoPluralize プルーラライザーは使用しないでください。Don't use the pluralizer. EF Core 5.0 で追加されました。Added in EF Core 5.0.

共通パラメーターは上記のとおりです。The common parameters are listed above.

例:Example:

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 and namespace:

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

スクリプト-DbContextScript-DbContext

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

パラメーター:Parameters:

パラメーターParameter 説明Description
-出力 <String>-Output <String> 結果の書き込み先のファイル。The file to write the result to.

共通パラメーターは上記のとおりです。The common parameters are listed above.

スクリプト-移行Script-Migration

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

パラメーター:Parameters:

パラメーターParameter 説明Description
-From<String>-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>-To <String> 移行を終了しています。The ending migration. 既定では、最後の移行になります。Defaults to the last migration.
-べき等-Idempotent 任意の移行時にデータベースで使用できるスクリプトを生成します。Generate a script that can be used on a database at any migration.
-NoTransactions-NoTransactions SQL トランザクションステートメントを生成しません。Don't generate SQL transaction statements. EF Core 5.0 で追加されました。Added in EF Core 5.0.
-出力 <String>-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 common parameters are listed above.

ヒント

To、From、および Output パラメーターでは、タブの拡張がサポートされています。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

データベースの更新Update-Database

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

パラメーターParameter 説明Description
-移行<String>-Migration <String> ターゲットの移行。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.
-接続 <String>-Connection <String> データベースへの接続文字列。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 parameters are listed above.

ヒント

移行パラメーターでは、タブの拡張がサポートされています。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 and a specified connection:

Update-Database -Migration InitialCreate
Update-Database -Migration 20180904195021_InitialCreate -Connection your_connection_string

その他のリソースAdditional resources