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 있습니다.

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

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

  • 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 프로젝트의 환경을 지정하려면 명령을 실행하기 전에 env:ASPNETCORE_ENVIRONMENT 설정합니다.

EF Core 5.0부터 추가 인수를 Program.CreateHostBuilder에 전달하여 명령줄에서 환경을 지정할 수도 있습니다.

Update-Database -Args '--environment Production'

공통 매개 변수

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

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

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

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

Add-Migration

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

매개 변수

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

공용 매개 변수는 위에 나열되어 있습니다.

Bundle-Migration

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

매개 변수

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

공용 매개 변수는 위에 나열되어 있습니다.

Drop-Database

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

매개 변수

매개 변수 Description
-WhatIf 삭제할 데이터베이스를 표시 하지만 삭제할 데이터베이스를 표시 하지 않습니다.

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

Get-DbContext

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

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

Get-Migration

사용 가능한 마이그레이션을 나열 합니다. EF Core 5.0에서 추가 되었습니다.

매개 변수

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

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

Optimize-DbContext

에서 사용 하는 모델의 컴파일된 버전을 생성 DbContext 합니다. EF Core 6에서 추가 되었습니다.

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

매개 변수

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

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

기본를 사용 하 고 프로젝트에가 하나만 있는 경우의 예제는 DbContext 다음과 같습니다.

Optimize-DbContext

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

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

마이그레이션 제거

마이그레이션에 대해 수행 된 코드 변경 내용을 롤백하는 마지막 마이그레이션을 제거 합니다.

매개 변수

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

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

Scaffold-DbContext

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

매개 변수

매개 변수 Description
-Connection <String> 데이터베이스에 대한 연결 문자열입니다. ASP.NET Core 2.x 프로젝트의 경우 값은 연결 문자열 > 의이름일 수 있습니다. 이 경우 프로젝트에 대해 설정 된 구성 소스에서 이름이 제공 됩니다. 이 매개 변수는 위치 매개 변수 이며 필수입니다.
-Provider <String> 사용할 공급자입니다. 일반적으로 NuGet 패키지의 이름입니다 (예:) Microsoft.EntityFrameworkCore.SqlServer . 이 매개 변수는 위치 매개 변수 이며 필수입니다.
-OutputDir <String> 엔터티 클래스 파일을 배치할 디렉터리입니다. 경로는 프로젝트 디렉터리에 상대적입니다.
-ContextDir <String> 파일을 저장할 디렉터리 DbContext 입니다. 경로는 프로젝트 디렉터리에 상대적입니다.
-Namespace <String> 생성 된 모든 클래스에 사용할 네임 스페이스입니다. 기본값은 루트 네임 스페이스와 출력 디렉터리에서 생성 됩니다. EF Core 5.0에서 추가 되었습니다.
-ContextNamespace <String> 생성 된 클래스에 사용할 네임 스페이스 DbContext 입니다. 참고: -Namespace 를 재정의 합니다. EF Core 5.0에서 추가 되었습니다.
-Context <String> 생성할 클래스의 이름 DbContext 입니다.
-Schemas <String[]> 엔터티 형식을 생성할 테이블의 스키마입니다. 이 매개 변수를 생략 하면 모든 스키마가 포함 됩니다.
-Tables <String[]> 엔터티 형식을 생성할 테이블입니다. 이 매개 변수를 생략 하면 모든 테이블이 포함 됩니다.
-DataAnnotations 특성을 사용 하 여 모델을 구성 합니다 (가능한 경우). 이 매개 변수를 생략 하면 흐름 API만 사용 됩니다.
-UseDatabaseNames 테이블 및 열 이름은 데이터베이스에 표시 된 대로 정확 하 게 사용 합니다. 이 매개 변수를 생략 하는 경우에는 데이터베이스 이름이 c # 이름 스타일 규칙을 더욱 잘 준수 하도록 변경 됩니다.
-Force 기존 파일을 덮어씁니다.
-NoOnConfiguring 생성 하지 않습니다 DbContext.OnConfiguring . EF Core 5.0에서 추가 되었습니다.
-NoPluralize Pluralizer를 사용 하지 마세요. EF Core 5.0에서 추가 되었습니다.

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

예:

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 스크립트를 생성 합니다. 모든 마이그레이션을 무시 합니다. EF Core 3.0에서 추가 되었습니다.

매개 변수

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

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

Script-Migration

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

매개 변수

매개 변수 설명
-From <String> 마이그레이션을 시작 하는 중입니다. 마이그레이션은 이름 또는 ID로 식별할 수 있습니다. 숫자 0은 첫 번째 마이그레이션 이전을 의미 하는 특수 한 경우입니다. 기본값은 0입니다.
-To <String> 종료 마이그레이션입니다. 마지막 마이그레이션에 대 한 기본값입니다.
-Idempotent 마이그레이션할 때 데이터베이스에서 사용할 수 있는 스크립트를 생성 합니다.
-NoTransactions SQL transaction 문을 생성 하지 않습니다. EF Core 5.0에서 추가 되었습니다.
-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> 데이터베이스에 대한 연결 문자열입니다. 기본값은 또는 에 지정된 AddDbContextOnConfiguring 입니다. EF Core 5.0에 추가되었습니다.

공용 매개 변수는 위에 나열되어 있습니다.

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

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

Update-Database 0

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

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

추가 리소스