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 Core와 .NET Framework 프로젝트 모두에서 작동합니다.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.dotnet 패키지를 지정 하는 줄을 추가 합니다.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:

    <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 콘솔 앱 또는 웹 앱은 클래스 라이브러리를 참조 합니다.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 플랫폼 apps에서 적용 됩니다.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 DescriptionDescription
-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.
-프로젝트<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.

Context, Project 및 StartupProject 매개 변수는 탭 확장을 지원 합니다.The Context, Project, and StartupProject parameters support tab-expansion.

추가-마이그레이션Add-Migration

새 마이그레이션을 추가 합니다.Adds a new migration.

매개 변수Parameters:

매개 변수Parameter DescriptionDescription
-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. 기본값은 "migration"입니다.Defaults to "Migrations".
-Namespace<String>-Namespace <String> 생성 된 클래스에 사용할 네임 스페이스입니다.The namespace to use for the generated classes. 출력 디렉터리에서 생성 되는 기본값입니다.Defaults to generated from the output directory. (EFCore 5.0.0부터 사용 가능)(Available from EFCore 5.0.0 onwards.)

Drop DatabaseDrop-Database

데이터베이스를 삭제합니다.Drops the database.

매개 변수Parameters:

매개 변수Parameter DescriptionDescription
-WhatIf-WhatIf 삭제할 데이터베이스를 표시 하지만 삭제할 데이터베이스를 표시 하지 않습니다.Show which database would be dropped, but don't drop it.

DbContextGet-DbContext

형식에 대 한 정보를 가져옵니다 DbContext .Gets information about a DbContext type.

마이그레이션 제거Remove-Migration

마이그레이션에 대해 수행 된 코드 변경 내용을 롤백하는 마지막 마이그레이션을 제거 합니다.Removes the last migration (rolls back the code changes that were done for the migration).

매개 변수Parameters:

매개 변수Parameter DescriptionDescription
-Force-Force 마이그레이션을 되돌립니다 (데이터베이스에 적용 된 변경 내용 롤백).Revert the migration (roll back the changes that were applied to the database).

스 캐 폴드-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 DescriptionDescription
-연결<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.SqlServer .Typically 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.
-컨텍스트 디렉터리<String>-ContextDir <String> 파일을 저장할 디렉터리 DbContext 입니다.The directory to put the DbContext file in. 경로는 프로젝트 디렉터리에 상대적입니다.Paths are relative to the project directory.
-Namespace<String>-Namespace <String> 생성 된 모든 클래스에 사용할 네임 스페이스입니다.The namespace to use for all generated classes. 기본값은 루트 네임 스페이스와 출력 디렉터리에서 생성 됩니다.Defaults to generated from the root namespace and the output directory. (EFCore 5.0.0부터 사용 가능)(Available from EFCore 5.0.0 onwards.)
-ContextNamespace<String>-ContextNamespace <String> 생성 된 클래스에 사용할 네임 스페이스 DbContext 입니다.The namespace to use for the generated DbContext class. 참고: -Namespace 를 재정의 합니다.Note: overrides -Namespace. (EFCore 5.0.0부터 사용 가능)(Available from EFCore 5.0.0 onwards.)
-Context<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). 이 매개 변수를 생략 하면 흐름 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 OnConfiguring생성 된 클래스에서 메서드를 생성 하지 않습니다 DbContext .Suppresses generation of the OnConfiguring method in the generated DbContext class. (EFCore 5.0.0부터 사용 가능)(Available from EFCore 5.0.0 onwards.)

예: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

스크립트-마이그레이션Script-Migration

선택한 마이그레이션의 모든 변경 내용을 선택한 다른 마이그레이션에 적용 하는 SQL 스크립트를 생성 합니다.Generates a SQL script that applies all of the changes from one selected migration to another selected migration.

매개 변수Parameters:

매개 변수Parameter DescriptionDescription
-시작<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-Idempotent 마이그레이션할 때 데이터베이스에서 사용할 수 있는 스크립트를 생성 합니다.Generate a script that can be used on a database at any migration.
-출력<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/.

To, From 및 Output 매개 변수는 탭 확장을 지원 합니다.The To, From, and Output parameters support tab-expansion.

다음 예에서는 마이그레이션 이름을 사용 하 여 InitialCreate migration에 대 한 스크립트를 만듭니다.The following example creates a script for the InitialCreate migration, using the migration name.

Script-Migration -To InitialCreate

다음 예에서는 마이그레이션 ID를 사용 하 여 InitialCreate migration 이후의 모든 마이그레이션에 대 한 스크립트를 만듭니다.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 DescriptionDescription
-마이그레이션<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.

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. 첫 번째는 마이그레이션 이름을 사용 하 고 두 번째는 마이그레이션 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