IT 이모저모

ASP.NET Core 2.0에서 Database 사용하기 - 2

exien 2018. 3. 23. 16:53

Entity Framework Core 2.0을 사용하여 데이터베이스에 액세스하는 응용 프로그램을 만들자 (서버 사이드 편)

 다음 ASP.NET Core 2.0 프로젝트를 만듭니다. 여기에서는 전회와 전전 소개 한 SPA 템플릿 (Angular)를 사용합니다.

 명령 줄에서 "dotnet new angular -o efcore2 '에서 새 프로젝트를 만듭니다.

 프로젝트 생성 후 Entity Fremework Core 2.0 패키지를 프로젝트에 추가합니다. 이번에는 RDB에 SQL Server 2017를 사용하고 있기 때문에, SQL Server 패키지를 지정합니다.

목록 7 Entity Framework Core 2.0 NuGet 패키지 추가
$ dotnet add package Microsoft . EntityFrameworkCore . SqlServer - V 2.0 . 1  

엔티티의 생성

 데이터베이스의 테이블에 해당하는 엔터티 클래스를 만듭니다. 여기에서는 프로젝트 폴더 아래에 "Models"폴더를 만들고 그 안에 Blog.cs, Post.cs를 만들어갑니다.

목록 8 Blog 엔티티 만들기 (Blog.cs)
using System . ComponentModel . DataAnnotations ; using System . ComponentModel . DataAnnotations . Schema ; 
 

namespace efcore2 . Models { [ Table ( "blog" )] public class Blog { [ Key ] public string blog_id { get ; set ; } public string blog_title { get ; set ; } public string author { get ; set ; } public bool delete_flg { get ; set

    
      
    
        
            
            
            
           ; } } } 
    

 Table, Key 특성은 어떤 엔티티에 부여 할 수있는 속성입니다.

 Entity Framework는 엔터티의 클래스 이름과 일치하는 DB 테이블을 매핑하도록 설계되어 있습니다 만, 클래스와 테이블 이름을 일치시킬 수없는 경우에, Table 속성 매개 변수에 지정된 테이블 이름에서도 매핑 수있게됩니다.

 한편, 기본 키는 Entity Framework의 규칙에 따라 ID 또는 테이블 이름 + ID의 이름을 가진 속성에 매핑됩니다. 테이블과 마찬가지로 규칙과 다른 속성 이름으로 매핑하려면 Key 특성을 부여하는 것으로, 기본 키와 끈 넣을 수 있습니다.

목록 9 Post 엔티티 만들기 (Post.cs)
using System . ComponentModel . DataAnnotations ; using System . ComponentModel . DataAnnotations . Schema ; 
 

namespace efcore2 . Models { [ Table ( "post" )] public class Post { [ Key ] public string post_id { get ; set ; } public string blog_id { get ; set ; } public string post_title { get ; set ; } public bool delete_flg { get ; set

    
      
    
        
            
            
            
           ; } } } 
    

 작성한 엔티티 클래스는 POCO (Plain Old CLR Object)입니다. 이러한 개체는 Entity Framework Core 가지는 기능은 포함되지 않고, 다음에 설명하는 문맥 클래스에서 DB 테이블과 끈 연결이 이루어집니다.

문맥의 작성

 이어 컨텍스트 클래스를 만듭니다. 컨텍스트 클래스에서 DB를 연결하는 지정 엔터티 클래스의 컨텍스트에 등록을하고 있습니다. 엔티티 클래스뿐만 아니라 "Models"폴더에 Efcore2Context.cs로 만듭니다.

목록 10 컨텍스트 클래스 만들기 (Efcore2Context.cs)
using efcore2 . Models ; using Microsoft . EntityFrameworkCore ;
 

namespace efcore2 . Models { // DbContext를 상속하는 ... (1) public class Efcore2Context : DbContext { // 생성자에서 DbContextOptions을 받고 슈퍼 클래스에 제공 ... (2) public Efcore2Context ( DbContextOptions < Efcore2Context > options ) : base ( options ) {}

    
        
    
        
           
        

        // 엔터티 컨텍스트에 등록 ... (3) public DbSet < Blog > Blogs { get ; set ; } public DbSet < Post > Posts { get ; set ; } } }
              
              
    

 컨텍스트 클래스는 "Microsoft.EntityFrameworkCore.DbContext」를 계승하여 작성합니다 (1).

 생성자에서는 DbContextOptions을 받고 슈퍼 클래스 (DbContext)에 그대로 전달합니다 (2). 이 DbContextOptions는 후술하는 Startup.cs에서 생성하고 데이터베이스 연결을 정의하고 있습니다.

 마지막으로 법인이지만,이 클래스에 DbSet 형식의 공용 속성으로 작성하여 문맥에 등록 된 테이블과 매핑되는 것입니다 (3).

 Entity Framework는이 컨텍스트 클래스를 기점으로 데이터베이스 액세스 코드를 작성하는 것입니다.

Startup.cs 컨텍스트 인스턴스의 생성 코드를 추가

 ASP.NET Core는 컨텍스트 클래스는 응용 프로그램을 시작할 때 생성 (인스턴스화)하여 응용 프로그램에서 단일 컨텍스트 인스턴스를 유지하고 재사용 할 수 있습니다. 컨텍스트 클래스에서 데이터베이스 연결 등 고가의 처리를 실시하고 있기 때문에, 매번 생성하지 않고 하나의 인스턴스를 돌아 가면서 사용하는 것이 더 효율적입니다.

목록 11 컨텍스트 클래스의 생성 (Startup.cs)
... 중략 public void ConfigureServices ( IServiceCollection services ) { 
    services . AddMvc ();
  


    // 다음 코드를 추가 
    services . AddDbContext < Efcore2Context > ( options => 
        options . UseSqlServer ( "Server = localhost; Database = efcore2; User ID = sa; Password = P @ ssw0rd" )); } ... 중략

 services.AddDbContext 메서드 컨텍스트의 인스턴스를 생성합니다. 인수 안에 options (DbContextOptions 형)의 UseSqlServer 메소드를 사용하여 연결을 지정합니다. 이 options가 위의 컨텍스트 클래스의 생성자에 전달되는 구조로되어 있습니다.

결론

 이번에는 Entity Framework Core 2.0의 개요와 데이터베이스의 설정, 어플리케이션 측에서 엔티티와 컨텍스트의 구현을 반복했습니다. 다음은 클라이언트 구현을하고 응용 프로그램을 완성시킨 후 Entity Framework Core 2.0의 새로운 기능을 시도하고 있습니다.