EF Core 콘솔 애플리케이션 만들기
페이지 정보
작성자최고관리자본문
여기에서는 Entity Framework Core를 Code-First 접근 방식과 함께 사용하는 방법을 단계별로 배우게 됩니다.
이를 시연하기 위해 Visual Studio 17(또는 그 이상)을 사용하여 .NET Core 콘솔 애플리케이션을 생성합니다.
.NET Core 콘솔 애플리케이션은 Visual Studio 2017 또는 .NET Core용 CLI(명령줄 인터페이스)를 사용하여 만들 수 있습니다.
여기서는 Visual Studio 2017을 사용하겠습니다.
.NET Core 콘솔 애플리케이션을 만들려면 Visual Studio 2017을 열고 메뉴에서 파일 -> 새로 만들기 -> 프로젝트를 선택합니다.
그러면 아래와 같이 새 프로젝트 팝업이 열립니다.
새 프로젝트 팝업의 왼쪽 창에서 설치됨 -> Visual C#을 확장하고 가운데 창에서 콘솔 앱(.NET Core) 템플릿을 선택합니다. 프로젝트 이름 및 위치를 입력하고 확인 버튼을 클릭하면 아래와 같이 콘솔 애플리케이션이 생성됩니다.
이제 패키지 관리자 콘솔을 사용하여 콘솔 애플리케이션에 EF Core를 설치해야 합니다. 메뉴에서 도구 -> NuGet 패키지 관리자 -> 패키지 관리자 콘솔을 선택하고 다음 명령을 실행하여 SQL Server 공급자 패키지를 설치합니다.
Install-Package Microsoft.EntityFrameworkCore.SqlServer
모델 생성
Entity Framework에는 기본 데이터베이스와 통신하기 위한 모델(Entity Data Model)이 있어야 합니다. 도메인 클래스의 모양, 데이터 주석 및 Fluent API 구성을 기반으로 모델을 빌드합니다.
EF 모델에는 개념적 모델, 저장소 모델 및 개념적 모델과 저장소 모델 간의 매핑의 세 부분이 포함됩니다. 코드 우선 접근 방식에서 EF는 도메인 클래스(엔티티 클래스), 컨텍스트 클래스 및 구성을 기반으로 개념적 모델을 빌드합니다. EF Core는 사용하는 공급자를 기반으로 스토리지 모델 및 매핑을 빌드합니다. 예를 들어, 스토리지 모델은 DB2와 비교하여 SQL Server의 경우 다릅니다.
EF는 기본 데이터베이스에 대한 CRUD(만들기, 읽기, 업데이트, 삭제) 작업에 이 모델을 사용합니다.
따라서 먼저 엔터티 클래스와 컨텍스트 클래스를 만들어야 합니다. 다음은 Student 및 Course에 대한 간단한 엔터티 클래스입니다.
public class Student { public int StudentId { get; set; } public string Name { get; set; } } public class Course { public int CourseId { get; set; } public string CourseName { get; set; } }
이제 이전 장에서 설명한 것처럼 DbContext를 파생하여 컨텍스트 클래스를 만들어야 합니다. 다음 SchoolContext 클래스는 컨텍스트 클래스라고도 합니다.
namespace EFCoreTutorials { public class SchoolContext : DbContext { public DbSet<Student> Students { get; set; } public DbSet<Course> Courses { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer(@"Server=.\SQLEXPRESS;Database=SchoolDB;Trusted_Connection=True;"); } } }
위의 컨텍스트 클래스에는 기본 데이터베이스의 Students 및 Courses 테이블에 매핑될 Student 및 Course 유형에 대한 두 개의 DbSet<TEntity> 속성이 포함됩니다.
OnConfiguring() 메서드에서 DbContextOptionsBuilder의 인스턴스는 사용할 데이터베이스를 지정하는 데 사용됩니다.
DbContextOptionsBuilder에 확장 메서드 UseSqlServer를 추가한 MS SQL Server 공급자를 설치했습니다.
연결 문자열 "Server=.\SQLEXPRESS;Database=SchoolDB;Trusted_Connection=True;" UseSqlServer 메서드에서 데이터베이스 정보를 제공합니다. Server=는 사용할 DB 서버를 지정하고 Database=는 생성할 데이터베이스의 이름을 지정하며 Trusted_Connection=True는 Windows 인증 모드를 지정합니다. EF Core는 마이그레이션을 실행할 때 이 연결 문자열을 사용하여 데이터베이스를 만듭니다.
컨텍스트 및 엔터티 클래스를 만든 후에는 마이그레이션을 추가하여 데이터베이스를 만들 차례입니다.
마이그레이션 추가
EF Core에는 모델을 기반으로 데이터베이스를 만들거나 업데이트하기 위한 다양한 마이그레이션 명령이 포함되어 있습니다.
이 시점에서 SchoolDB 데이터베이스는 없습니다.
따라서 마이그레이션을 추가하여 모델(엔티티 및 컨텍스트)에서 데이터베이스를 생성해야 합니다.
NuGet 패키지 관리자 콘솔과 dotnet CLI(명령줄 인터페이스)를 사용하여 마이그레이션 명령을 실행할 수 있습니다.
Visual Studio의 도구 -> NuGet 패키지 관리자 -> 패키지 관리자 콘솔에서 NuGet 패키지 관리자 콘솔을 열고 다음 명령을 입력합니다.
PM> add-migration CreateSchoolDB
dotnet CLI를 사용하는 경우 다음 명령어를 입력합니다.
> dotnet ef migrations add CreateSchoolDB
그러면 아래와 같이 프로젝트에 Migrations라는 새 폴더가 생성되고 ModelSnapshot 파일이 생성됩니다.
마이그레이션을 생성한 후에도 아래와 같이 패키지 관리자 콘솔에서 update-database 명령을 사용하여 데이터베이스를 생성해야 합니다.
PM> update-database –verbose
dotnet CLI에서 다음 명령어를 입력합니다.
> dotnet ef database update
이렇게 하면 UseSqlServer() 메서드의 연결 문자열에 지정된 이름과 위치로 데이터베이스가 생성됩니다. 아래와 같이 각 DbSet 속성(Students 및 Courses)에 대한 테이블을 생성합니다.
이것은 데이터베이스를 만들기 위한 첫 번째 마이그레이션이었습니다. 이제 도메인 클래스 또는 구성을 추가하거나 업데이트할 때마다 add-migration 및 update-database 명령을 사용하여 데이터베이스를 모델과 동기화해야 합니다.
데이터 읽기 또는 쓰기
이제 아래와 같이 컨텍스트 클래스를 사용하여 데이터를 저장하고 검색할 수 있습니다.
namespace EFCoreTutorials { class Program { static void Main(string[] args) { using (var context = new SchoolContext()) { var std = new Student() { Name = "Bill" }; context.Students.Add(std); context.SaveChanges(); } } } }