contract@chaoreumsoft.co.kr |    031-921-0523

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을 열고 메뉴에서 파일 -> 새로 만들기 -> 프로젝트를 선택합니다. 


그러면 아래와 같이 새 프로젝트 팝업이 열립니다.


0dc9464e270a7c53b10f992ce51c360e_1651218478_6912.png
 

새 프로젝트 팝업의 왼쪽 창에서 설치됨 -> Visual C#을 확장하고 가운데 창에서 콘솔 앱(.NET Core) 템플릿을 선택합니다. 프로젝트 이름 및 위치를 입력하고 확인 버튼을 클릭하면 아래와 같이 콘솔 애플리케이션이 생성됩니다.


0dc9464e270a7c53b10f992ce51c360e_1651218505_5396.png
 

이제 패키지 관리자 콘솔을 사용하여 콘솔 애플리케이션에 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 파일이 생성됩니다.

0dc9464e270a7c53b10f992ce51c360e_1651218821_9851.png
 

마이그레이션을 생성한 후에도 아래와 같이 패키지 관리자 콘솔에서 update-database 명령을 사용하여 데이터베이스를 생성해야 합니다.

PM> update-database –verbose 


dotnet CLI에서 다음 명령어를 입력합니다.

> dotnet ef database update 


이렇게 하면 UseSqlServer() 메서드의 연결 문자열에 지정된 이름과 위치로 데이터베이스가 생성됩니다. 아래와 같이 각 DbSet 속성(Students 및 Courses)에 대한 테이블을 생성합니다.

0dc9464e270a7c53b10f992ce51c360e_1651218894_909.png
 

이것은 데이터베이스를 만들기 위한 첫 번째 마이그레이션이었습니다. 이제 도메인 클래스 또는 구성을 추가하거나 업데이트할 때마다 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();
            }
        }
    }
}
Tag
Entity Framework Core 사용법, EF Core
© Chaoreumsoft Corp. All rights reserved.