IT 이모저모

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

exien 2018. 3. 23. 16:52

Entity Framework Core는

 먼저 Entity Framework에 대해 설명합니다. Entity Framework는 .NET Framework 런타임에서 사용할 수있는 데이터 액세스 라이브러리입니다. Entity Framework는 RDB에 대한 데이터 액세스를 수행하고 그 결과를 객체에 매핑하는 이른바 ORM (Object / Relation Mapping) 프레임 워크로 자리 매김합니다. 2008 년에 첫 번째 버전이 공개 된 후 .NET Framework의 진화와 함께 기능과 성능이 세련되어 왔습니다.

 Entity Framework는 ORM로서의 기능 이외에도 기존의 데이터베이스 정보를 기초로 엔티티 객체를 자동 생성하고, 반대로 엔터티 개체에서 데이터베이스 테이블을 생성 할 마이그레이션 기능도 갖추고 있습니다. 또한 이러한 자동 생성 기능은 전자가 데이터베이스 퍼스트 (또는 모델 퍼스트), 후자가 코드 식사와 일반적으로 불리고 있습니다.

 이 Entity Framework의 크로스 플랫폼 버전에 해당하는 것이 Entity Framework Core입니다.

Entity Framework Core 2.0은

 전술 한 바와 같이 Entity Framework Core는 다양한 플랫폼에서 실행할 수 Entity Framework입니다. Entity Framework가 .NET Framework에서만 작동하는 반면 Entity Framework Core는 .NET Core, .NET Framework Mono, Xamarin, UWP (Universal Windows Platform)에서 동작시킬 수 있습니다. 따라서 코드의 이식이 용이하다, ASP.NET Core과 같은 특징을 가지고 있습니다.

 다음은 Entity Framework Core 2.0 릴리스 발표 에서 소개되는 2.0의 새로운 기능입니다.

  • LINQ에서 Like 연산자 사용
  • SQL 문에서 문자열 보완
  • 테이블 분할
  • 글로벌 쿼리 필터
  • DB 컨텍스트 수영장

 이러한 기능에 대해서는 다음 구현을 통해 자세한 내용을 확인하고 있습니다.

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

 여기에서 실제로 Entity Framework Core 2.0을 사용하여 데이터베이스에 액세스하는 응용 프로그램을 작성하고 있습니다. RDBMS는 SQL Server 2017를 사용하지만, macOS 및 Linux에서도 작동 할 수 있도록 이번에는 Docker에서 SQL Server를 시작하는 방법에 대한 설명을하고 있습니다.

 Docker가 설치되어 있지 않은 경우는 공식 사이트 에서 해당 플랫폼을 설치하십시오.

SQL Server 2017 설치

 Docker에서 실행시킬 수있는 SQL Server 2017가 Microsoft에서 제공 되고 있기 때문에 여기를 사용하여 SQL Server를 설치하고 있습니다.

 설치는 명령 줄에서 목록 1의 docker 명령 행을 실행하기 만하면됩니다.

목록 1 SQL Server 2017의 이미지를 사용하여 Docker 컨테이너를 시작
$ docker run - d - name mssqlserver - e 'ACCEPT_EULA = Y' - e 'SA_PASSWORD = P @ ssw0rd' - e 'MSSQL_PID = Developer' - e 'MSSQL_LCID = 1041' - p 1433 : 1433 microsoft / mssqlserver - linux : 2017 - latest    

 "docker run"명령은 새로운 Docker 컨테이너를 새로 만들기 - 시작하는 명령입니다. 명령 끝의 "microsoft / mssql-server-linux : 2017-latest"이 컨테이너의 이미지를 지정하는 부분에서 Docker의 공식 저장소에서 SQL Server 2017의 이미지를 다운로드합니다.

 그 외에도 몇 가지 지정하는 옵션의 의미에 대해서는 다음 표를 참조하십시오.

docker 명령 옵션
옵션설명
-ddocker 프로세스를 백그라운드에서 실행
--namedocker 컨테이너의 이름을 지정
-e 'ACCEPT_EULA = Y'SQL Server의 이용 약관에 동의
-e 'SA_PASSWORD ='SQL Server 암호
-e 'MSSQL_PID = Developer'SQL Server 버전 설정
-e 'MSSQL_LCID = 1041'SQL Server의 로케일 설정. 1041은 일본어 로케일
-p 1433 : 1433docker을 시작하는 시스템과 docker에서 포트의 끈 연결 (포트 포워딩)

 옵션 중 - name 옵션을 사용하여 지정된 컨테이너의 이름은 컨테이너를 중지하거나 다시 컨테이너를 시작하는 데 사용할 수 있습니다.

목록 2 Docker 컨테이너를 중지하고 2 번째 이후의 시작
# 컨테이너의 정지
$ docker stop mssqlserver

# 컨테이너의 시작 (2 회 이상) 
$ docker start mssqlserver

sqlcmd 명령 줄 도구 설치

 다음은 Windows와 macOS 명령 줄에서 SQL을 실행할 수있는 sqlcmd 유틸리티를 설치합니다. 여기의 설치는 필수가 아니기 때문에 다른 SQL Server에 연결할 수있는 클라이언트 응용 프로그램을 사용하는 경우는 생략해도 상관 없습니다.

 Windows의 경우, 설치 프로그램 을 다운로드하여 설치하십시오. macOS의 경우 Homebrew 를 사용하여 sqlcmd를 설치할 수 있습니다. 목록 3은 Homebrew의 설치 단계입니다.

목록 3 sqlcmd 설치 (macOS 버전)
$ brew tap microsoft / mssql - release https : //github.com/Microsoft/homebrew-mssql-release
$ brew update
$ ACCEPT_EULA = y brew install - no - sandbox msodbcsql mssql - tools

데이터베이스 테이블 만들기

 이어 데이터베이스와 테이블을 만듭니다. 이번에는 데이터베이스 이름을 "efcore2"며 "blog (블로그) '와'post (블로그 게시물)"라는 두 테이블을 만듭니다.

 sqlcmd를 사용 CREATE DATABASE 문을 실행합니다.

목록 4 efcore2 데이터베이스 만들기
$ sqlcmd - S localhost - U SA - P 'P @ ssw0rd' - Q "CREATE DATABASE efcore2" 

 sqlcmd 옵션이지만 "- S"는 서버 이름 "- U '는 서버의 로그인 ID"- P "는 암호입니다.

 서버 이름은 localhost를 지정합니다. Docker는 어디 까지나 OS 프로세스의 하나에 지나지 않기 때문에 localhost에서만 접속하실 수 있습니다. 서버 이름 SA는 SQL Server 관리자 계정 이름입니다. 암호는 Docker 컨테이너 작성시에 설정 한 것을 사용합니다.

 테이블뿐만 아니라 sqlcmd에서 CREATE TABLE 문으로 작성합니다.

목록 5 테이블 만들기
# blog 테이블 만들기 
$ sqlcmd - S localhost - U SA - P 'P @ ssw0rd' - Q "CREATE TABLE efcore2.dbo.blog \ 
(\
    blog_id CHAR (5) PRIMARY KEY NOT NULL \
    blog_title NVARCHAR (128), \
    author NVARCHAR (128), \
    delete_flg BIT \
); "

# post 테이블 만들기 
$ sqlcmd - S localhost - U SA - P 'P @ ssw0rd' - Q "CREATE TABLE efcore2.dbo.post \ 
(\
    post_id CHAR (5) PRIMARY KEY NOT NULL \
    blog_id CHAR (5) \
    post_title NVARCHAR (128), \
    post_detail NVARCHAR (256), \
    created_date DATETIME \
    delete_flg BIT \
    CONSTRAINT post_blog_fk FOREIGN KEY (blog_id) REFERENCES blog (blog_id) \
); "

 데이터베이스 설치의 마지막에, blog 테이블과 post 테이블에 데이터 등록합니다.

목록 6 테이블에 데이터 등록
# blog 테이블에 데이터 등록 
$ sqlcmd - S localhost - U SA - P 'P @ ssw0rd' - Q "\ 
INSERT INTO efcore2.dbo.blog (blog_id, blog_title, author, delete_flg) VALUES ( '10000', 'ASP.NET Core 2.0을 배우는', 'akiba', 0); \
INSERT INTO efcore2.dbo.blog (blog_id, blog_title, author, delete_flg) VALUES ( '20000', 'EntityFramework Core 2.0의 색', 'yamada', 0); \
INSERT INTO efcore2.dbo.blog (blog_id, blog_title, author, delete_flg) VALUES ( '99999', 'ASP.NET Core 1.0에 대해', 'akiba', 1); \
"

# post 테이블에 데이터 등록 
$ sqlcmd - S localhost - U SA - P 'P @ ssw0rd' - Q "\ 
INSERT INTO efcore2.dbo.post (post_id, blog_id, post_title, post_detail, created_date, delete_flg) VALUES ( '10001', '10000', 'Razor Pages를 알고', 'Razor Pages는 ASP.NET Core 2.0에서 도입 된 새로운 기능입니다. 페이지 코딩이 많은 응용 프로그램에서 중용 될 수 있도록 설계되어있어 ... ','2018-01-01 00 : 00 : 00.000 ', 0); \
INSERT INTO efcore2.dbo.post (post_id, blog_id, post_title, post_detail, created_date, delete_flg) VALUES ( '10002', '10000', 'SPA 템플릿을 사용해 본다', 'ASP.NET Core는 View 계층에 SPA ( Single Page Application)을 실현하는 JavaScript 프레임 워크를 사용하여 Web 응용 프로그램을 만들 수 있습니다 ... ','2018-01-01 00 : 00 : 00.000 ', 0); \
INSERT INTO efcore2.dbo.post (post_id, blog_id, post_title, post_detail, created_date, delete_flg) VALUES ( '20001', '20000', 'EntityFramework Core 2.0 개요', 'Entity Framework는 .NET 환경에서 사용할 수있는 있는 데이터베이스 액세스 프레임 워크입니다. 그 Entity Framework의 크로스 플 툼 버전이다 ... ','2018-01-01 00 : 00 : 00.000 ', 0); \
"

 이상에서 데이터베이스의 설치가 완료됩니다.