Entity Framework Core 도구 참조 - Visual Studio의 패키지 관리자 콘솔

Entity Framework Core용 PMC(패키지 관리자 콘솔) 도구는 디자인 타임 개발 작업을 수행합니다. 예를 들어 이러한 도구는 마이그레이션을 만들고, 마이그레이션을 적용하고, 기존 데이터베이스를 기반으로 모델용 코드를 생성합니다. 명령은 패키지 관리자 콘솔을 사용하여 Visual Studio 내에서 실행됩니다. 이러한 도구는 .NET Core와 .NET Framework 프로젝트 모두에서 작동합니다.

Visual Studio를 사용하지 않는 경우 대신 EF Core 명령줄 도구를 사용하는 것이 좋습니다. .NET Core CLI 도구는 플랫폼 간이며 명령 프롬프트 내에서 실행됩니다.

도구 설치

패키지 관리자 콘솔에서 다음 명령을 실행하여 패키지 관리자 콘솔 도구를 설치합니다.

Install-Package Microsoft.EntityFrameworkCore.Tools

패키지 관리자 콘솔에서 다음 명령을 실행하여 도구를 업데이트합니다.

Update-Package Microsoft.EntityFrameworkCore.Tools

설치 확인

다음 명령을 실행하여 도구가 설치되어 있는지 확인합니다.

Get-Help about_EntityFrameworkCore

출력은 다음과 같습니다(사용 중인 도구의 버전을 알려주지 않음).


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

TOPIC
    about_EntityFrameworkCore

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

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

도구 사용

도구를 사용하기 전에 다음을 수행합니다.

  • 대상 프로젝트와 시작 프로젝트의 차이점을 이해합니다.
  • .NET Standard 클래스 라이브러리에서 도구를 사용하는 방법을 알아봅니다.
  • ASP.NET Core 프로젝트의 경우 환경을 설정합니다.

대상 및 시작 프로젝트

명령은 프로젝트시작 프로젝트를 참조합니다.

  • 프로젝트는 명령이 파일을 추가하거나 제거하는 위치이기 때문에 대상 프로젝트라고도 합니다. 기본적으로 패키지 관리자 콘솔에서 선택한 기본 프로젝트는 대상 프로젝트입니다. -Project 매개 변수를 사용하여 다른 프로젝트를 대상 프로젝트로 지정할 수 있습니다.

  • 시작 프로젝트는 도구가 빌드하고 실행하는 프로젝트입니다. 도구는 디자인 타임에 애플리케이션 코드를 실행하여 데이터베이스 연결 문자열 및 모델 구성과 같은 프로젝트에 대한 정보를 가져와야 합니다. 기본적으로 솔루션 탐색기시작 프로젝트는 시작 프로젝트입니다. -StartupProject 매개 변수를 사용하여 다른 프로젝트를 시작 프로젝트로 지정할 수 있습니다.

시작 프로젝트와 대상 프로젝트는 종종 동일한 프로젝트입니다. 별도의 프로젝트인 일반적인 시나리오는 다음과 같습니다.

  • EF Core 컨텍스트 및 엔터티 클래스는 .NET Core 클래스 라이브러리에 있습니다.
  • .NET Core 콘솔 앱 또는 웹앱은 클래스 라이브러리를 참조합니다.

EF Core 컨텍스트와 별도로 클래스 라이브러리에 마이그레이션 코드를 배치할 수도 있습니다.

기타 대상 프레임워크

패키지 관리자 콘솔 도구는 .NET Core 또는 .NET Framework 프로젝트에서 작동합니다. .NET Standard 클래스 라이브러리에 EF Core 모델이 있는 앱에는 .NET Core 또는 .NET Framework 프로젝트가 없을 수 있습니다. 예를 들어 Xamarin 및 유니버설 Windows 플랫폼 앱의 경우입니다. 이러한 경우 도구의 시작 프로젝트 역할을 하는 유일한 목적인 .NET Core 또는 .NET Framework 콘솔 앱 프로젝트를 만들 수 있습니다. 프로젝트는 실제 코드가 없는 임시 프로젝트일 수 있으며, 도구에 대한 대상을 제공하는 데만 필요합니다.

더미 프로젝트가 필요한 이유는 무엇인가요? 앞에서 설명한 대로 도구는 디자인 타임에 애플리케이션 코드를 실행해야 합니다. 이렇게 하려면 .NET Core 또는 .NET Framework 런타임을 사용해야 합니다. EF Core 모델이 .NET Core 또는 .NET Framework 대상으로 하는 프로젝트에 있는 경우 EF Core 도구는 프로젝트에서 런타임을 차용합니다. EF Core 모델이 .NET Standard 클래스 라이브러리에 있는 경우 이 작업을 수행할 수 없습니다. .NET Standard는 실제 .NET 구현이 아닙니다. .NET 구현에서 지원해야 하는 API 집합의 사양입니다. 따라서 .NET Standard는 EF Core 도구가 애플리케이션 코드를 실행하는 데 충분하지 않습니다. 시작 프로젝트로 사용하기 위해 만든 더미 프로젝트는 도구가 .NET Standard 클래스 라이브러리를 로드할 수 있는 구체적인 대상 플랫폼을 제공합니다.

ASP.NET Core 환경

명령줄에서 ASP.NET Core 프로젝트에 대한 환경을 지정할 수 있습니다. 이 인수와 추가 인수는 Program.CreateHostBuilder에 전달됩니다.

Update-Database -Args '--environment Production'

일반 매개 변수

다음 표에서는 모든 EF Core 명령에 공통적인 매개 변수를 보여 줍니다.

매개 변수 설명
-Context <String> 사용할 DbContext 클래스입니다. 네임스페이스를 사용하여 클래스 이름만 또는 정규화됩니다. 이 매개 변수를 생략하면 EF Core는 컨텍스트 클래스를 찾습니다. 여러 컨텍스트 클래스가 있는 경우 이 매개 변수가 필요합니다.
-Project <String> 대상 프로젝트입니다. 이 매개 변수를 생략하면 패키지 관리자 콘솔기본 프로젝트가 대상 프로젝트로 사용됩니다.
-StartupProject <String> 시작 프로젝트입니다. 이 매개 변수를 생략하면 솔루션 속성시작 프로젝트가 대상 프로젝트로 사용됩니다.
-Args <String> 애플리케이션에 전달된 인수입니다.
-Verbose 자세한 정보 출력을 표시합니다.

명령에 대한 도움말 정보를 표시하려면 PowerShell의 Get-Help 명령을 사용합니다.

Context, ProjectStartupProject 매개 변수는 탭 확장을 지원합니다.

마이그레이션 추가

새 마이그레이션을 추가합니다.

매개 변수:

매개 변수 설명
-Name <String> 마이그레이션의 이름입니다. 이 매개 변수는 위치 매개 변수이며 필수입니다.
-OutputDir <String> 파일을 출력하는 데 사용하는 디렉터리입니다. 경로는 대상 프로젝트 디렉터리를 기준으로 합니다. 기본값은 "마이그레이션"입니다.
-Namespace <String> 생성된 클래스에 사용할 네임스페이스입니다. 출력 디렉터리에서 생성되는 기본값입니다.

일반적인 매개 변수는 위에 나열되어 있습니다.

Bundle-Migration

데이터베이스를 업데이트하는 실행 파일을 만듭니다.

매개 변수:

매개 변수 설명
-Output <String> 만들 실행 파일의 경로입니다.
-Force 기존 파일을 덮어씁니다.
-SelfContained 또한 컴퓨터에 설치할 필요가 없도록 .NET 런타임을 번들로 묶습니다.
-TargetRuntime <String> 번들로 묶을 대상 런타임입니다.
-Framework <String> 대상 프레임워크입니다. 기본값은 프로젝트의 첫 번째입니다.

일반적인 매개 변수는 위에 나열되어 있습니다.

Drop-Database

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

매개 변수:

매개 변수 설명
-WhatIf 삭제할 데이터베이스를 표시하되 삭제하지 마세요.

일반적인 매개 변수는 위에 나열되어 있습니다.

Get-DbContext

사용 가능한 DbContext 형식에 대한 정보를 나열하고 가져옵니다.

일반적인 매개 변수는 위에 나열되어 있습니다.

Get-Migration

사용 가능한 마이그레이션을 나열합니다.

매개 변수:

매개 변수 설명
-Connection <String> 데이터베이스에 대한 연결 문자열입니다. 기본값은 AddDbContext 또는 OnConfiguring에 지정된 입니다.
-NoConnect 데이터베이스에 연결하지 마세요.

일반적인 매개 변수는 위에 나열되어 있습니다.

Optimize-DbContext

DbContext에서 사용하는 모델의 컴파일된 버전을 생성합니다.

자세한 내용은 컴파일된 모델을 참조하세요.

매개 변수:

매개 변수 설명
-OutputDir <String> 파일을 넣을 디렉터리입니다. 경로는 프로젝트 디렉터리를 기준으로 합니다.
-Namespace <String> 생성된 모든 클래스에 사용할 네임스페이스입니다. 기본값은 루트 네임스페이스 및 출력 디렉터리와 CompiledModels에서 생성됩니다.

일반적인 매개 변수는 위에 나열되어 있습니다.

다음 예제에서는 기본값을 사용하고 프로젝트에 하나의 DbContext만 있는 경우 작동합니다.

Optimize-DbContext

다음 예제에서는 지정된 이름의 컨텍스트에 대해 모델을 최적화하고 별도의 폴더 및 네임스페이스에 배치합니다.

Optimize-DbContext -OutputDir Models -Namespace BlogModels -Context BlogContext

마이그레이션 제거

마지막 마이그레이션을 제거합니다(마이그레이션을 위해 수행된 코드 변경 내용 롤백).

매개 변수:

매개 변수 설명
-Force 마이그레이션을 되돌려 줍니다(데이터베이스에 적용된 변경 내용 롤백).

일반적인 매개 변수는 위에 나열되어 있습니다.

Scaffold-DbContext

데이터베이스의 DbContext 및 엔터티 형식에 대한 코드를 생성합니다. Scaffold-DbContext가 엔터티 형식을 생성하려면 데이터베이스 테이블에 기본 키가 있어야 합니다.

매개 변수:

매개 변수 설명
-Connection <String> 데이터베이스에 대한 연결 문자열입니다. ASP.NET Core 2.x 프로젝트의 경우 값은 name=<연결 문자열의 이름>일 수 있습니다. 이 경우 이름은 프로젝트에 대해 설정된 구성 원본에서 가져옵니다. 이 매개 변수는 위치 매개 변수이며 필수입니다.
-Provider <String> 사용할 공급자입니다. 일반적으로 NuGet 패키지의 이름입니다(예: Microsoft.EntityFrameworkCore.SqlServer). 이 매개 변수는 위치 매개 변수이며 필수입니다.
-OutputDir <String> 엔터티 클래스 파일을 넣을 디렉터리입니다. 경로는 프로젝트 디렉터리를 기준으로 합니다.
-ContextDir <String> DbContext 파일을 넣을 디렉터리입니다. 경로는 프로젝트 디렉터리를 기준으로 합니다.
-Namespace <String> 생성된 모든 클래스에 사용할 네임스페이스입니다. 기본값은 루트 네임스페이스 및 출력 디렉터리에서 생성됩니다.
-ContextNamespace <String> 생성된 DbContext 클래스에 사용할 네임스페이스입니다. 참고: -Namespace를 재정의합니다.
-Context <String> 생성할 DbContext 클래스의 이름입니다.
-Schemas <String[]> 엔터티 형식을 생성할 테이블 및 뷰의 스키마입니다. 이 매개 변수를 생략하면 모든 스키마가 포함됩니다. 이 옵션을 사용하면 -Table을 사용하여 명시적으로 포함되지 않더라도 스키마의 모든 테이블과 뷰가 모델에 포함됩니다.
-Tables <String[]> 엔터티 형식을 생성할 테이블 및 뷰입니다. 특정 스키마의 테이블 또는 뷰는 'schema.table' 또는 'schema.view' 형식을 사용하여 포함할 수 있습니다. 이 매개 변수를 생략하면 모든 테이블과 뷰가 포함됩니다.
-DataAnnotations 특성을 사용하여 모델을 구성합니다(가능한 경우). 이 매개 변수를 생략하면 흐름 API만 사용됩니다.
-UseDatabaseNames 테이블, 뷰, 시퀀스 및 열 이름이 데이터베이스에 표시되는 것과 똑같이 사용합니다. 이 매개 변수를 생략하면 데이터베이스 이름이 C# 이름 스타일 규칙을 더 밀접하게 준수하도록 변경됩니다.
-Force 기존 파일을 덮어씁니다.
-NoOnConfiguring DbContext.OnConfiguring을 생성하지 마세요.
-NoPluralize pluralizer를 사용하지 마세요.

일반적인 매개 변수는 위에 나열되어 있습니다.

예시:

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

선택한 테이블만 스캐폴딩하고 지정된 이름과 네임스페이스를 사용하여 별도의 폴더에 컨텍스트를 만드는 예제입니다.

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

다음 예제에서는 비밀 관리자 도구를 사용하여 설정되었을 수 있는 프로젝트 구성에서 연결 문자열을 읽습니다.

Scaffold-DbContext "Name=ConnectionStrings:Blogging" Microsoft.EntityFrameworkCore.SqlServer

Script-DbContext

DbContext에서 SQL 스크립트를 생성합니다. 마이그레이션을 무시합니다.

매개 변수:

매개 변수 설명
-Output <String> 결과를 쓸 파일입니다.

일반적인 매개 변수는 위에 나열되어 있습니다.

Script-Migration

선택한 마이그레이션에서 선택한 다른 마이그레이션으로 모든 변경 내용을 적용하는 SQL 스크립트를 생성합니다.

매개 변수:

매개 변수 설명
-From <String> 시작 마이그레이션입니다. 마이그레이션은 이름 또는 ID로 식별될 수 있습니다. 숫자 0은 첫 번째 마이그레이션 전을 의미하는 특별한 경우입니다. 기본값은 0입니다.
-To <String> 종료 마이그레이션입니다. 기본값은 마지막 마이그레이션입니다.
-Idempotent 모든 마이그레이션 시 데이터베이스에서 사용할 수 있는 스크립트를 생성합니다.
-NoTransactions SQL 트랜잭션 문을 생성하지 마세요.
-Output <String> 결과를 쓸 파일입니다. 이 매개 변수를 생략하면 /obj/Debug/netcoreapp2.1/ghbkztfz.sql/과 같은 앱의 런타임 파일이 만들어지는 것과 동일한 폴더에 생성된 이름으로 파일이 만들어집니다.

일반적인 매개 변수는 위에 나열되어 있습니다.

To, FromOutput 매개 변수는 탭 확장을 지원합니다.

다음 예제에서는 마이그레이션 이름을 사용하여 InitialCreate 마이그레이션(마이그레이션 없이 데이터베이스에서)에 대한 스크립트를 만듭니다.

Script-Migration 0 InitialCreate

다음 예제에서는 마이그레이션 ID를 사용하여 InitialCreate 마이그레이션 후의 모든 마이그레이션에 대한 스크립트를 만듭니다.

Script-Migration 20180904195021_InitialCreate

Update Database

데이터베이스를 마지막 마이그레이션 또는 지정된 마이그레이션으로 업데이트합니다.

매개 변수 설명
-Migration <String> 대상 마이그레이션입니다. 마이그레이션은 이름 또는 ID로 식별될 수 있습니다. 숫자 0은 첫 번째 마이그레이션 전을 의미하는 특별한 경우이며 모든 마이그레이션을 되돌립니다. 마이그레이션을 지정하지 않으면 명령은 기본적으로 마지막 마이그레이션으로 설정됩니다.
-Connection <String> 데이터베이스에 대한 연결 문자열입니다. 기본값은 AddDbContext 또는 OnConfiguring에 지정된 마이그레이션입니다.

일반적인 매개 변수는 위에 나열되어 있습니다.

Migration 매개 변수는 탭 확장을 지원합니다.

다음 예제에서는 모든 마이그레이션을 되돌려 줍니다.

Update-Database 0

다음 예제에서는 데이터베이스를 지정된 마이그레이션으로 업데이트합니다. 첫 번째는 마이그레이션 이름을 사용하고 두 번째는 마이그레이션 ID와 지정된 연결을 사용합니다.

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

추가 리소스