파트 5: ASP.NET Core MVC - SQL Server LocalDB로 작업하기
- 본 번역문서의 원문은 Working with SQL Server LocalDB docs.asp.net 입니다.
- 본 번역문서는 ASP.NET Core MVC : SQL Server LocalDB로 작업하기 www.taeyo.net 에서도 함께 제공됩니다.
ApplicationDbContext
클래스는 데이터베이스의 연결, Movie
개체와 데이터베이스 레코드 간의 매핑 작업 등을 처리합니다.
이 데이터베이스 컨텍스트는 Startup.cs 파일의 ConfigureServices
메서드에서 의존성 주입(Dependency Injection) 컨테이너를 이용해서 등록됩니다:
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
이 때, ASP.NET Core Configuration 시스템이 ConnectionString
을 읽어오는데, 로컬 개발 시에는 appsettings.json 파일에서 연결 문자열을 가져옵니다:
{
"ConnectionStrings": {
"DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=aspnet-MvcMovie-7db2893b-375e-48bd-86a3-bb9779b72ebe;Trusted_Connection=True;MultipleActiveResultSets=true"
},
"Logging": {
"IncludeScopes": false,
테스트 서버나 운영 서버에 응용 프로그램을 배포할 때는 환경 변수나 다른 접근방식을 이용해서, 실제 운영 SQL Server를 지정하는 연결 문자열을 설정할 수 있습니다. 더 구체적인 정보는 Configuration 문서를 참고하시기 바랍니다.
SQL Server Express LocalDB
LocalDB는 프로그램 개발에 특화된 SQL Server Express Database Engine의 경량 버전입니다. LocalDB는 필요한 시점에 요청에 의해서 구동되고(On-Demand) 사용자 모드에서 실행되므로 복잡한 구성이 필요 없습니다. 기본적으로 LocalDB 데이터베이스는 C:/Users/<user> 디렉터리에 "*.mdf" 데이터베이스 파일들을 생성합니다.
-
보기(View) 메뉴에서 SQL Server 개체 탐색기(SQL Server Object Explorer) (SSOX)를 엽니다.
-
그리고 마우스 오른쪽 버튼으로
Movie
테이블을 클릭한 다음, 디자이너 보기(View Designer)를 선택합니다.
디자인(Design) 탭의 ID
컬럼 옆에 표시된 열쇄 아이콘에 주의하시기 바랍니다.
기본적으로 EF Core는 ID
라는 이름을 가진 속성을 기본 키로 간주합니다.
-
마우스 오른쪽 버튼으로
Movie
테이블을 클릭한 다음, 데이터 보기(View Data)를 선택해봅니다.
데이터베이스 시드하기
계속해서 이번에는 Models 폴더에 SeedData
라는 이름의 새로운 클래스를 생성합니다.
그리고 자동으로 생성된 코드를 다음 코드로 대체합니다:
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using System;
using System.Linq;
namespace MvcMovie.Models
{
public static class SeedData
{
public static void Initialize(IServiceProvider serviceProvider)
{
using (var context = new ApplicationDbContext(
serviceProvider.GetRequiredService<DbContextOptions<ApplicationDbContext>>()))
{
if (context.Movie.Any())
{
return; // DB has been seeded
}
context.Movie.AddRange(
new Movie
{
Title = "When Harry Met Sally",
ReleaseDate = DateTime.Parse("1989-1-11"),
Genre = "Romantic Comedy",
Price = 7.99M
},
new Movie
{
Title = "Ghostbusters ",
ReleaseDate = DateTime.Parse("1984-3-13"),
Genre = "Comedy",
Price = 8.99M
},
new Movie
{
Title = "Ghostbusters 2",
ReleaseDate = DateTime.Parse("1986-2-23"),
Genre = "Comedy",
Price = 9.99M
},
new Movie
{
Title = "Rio Bravo",
ReleaseDate = DateTime.Parse("1959-4-15"),
Genre = "Western",
Price = 3.99M
}
);
context.SaveChanges();
}
}
}
}
이 코드에서 데이터베이스에 이미 데이터가 존재할 경우, 시드 이니셜라이저가 그대로 반환되어 종료된다는 점에 유의하시기 바랍니다.
if (context.Movie.Any())
{
return; // DB has been seeded
}
이 시드 이니셜라이저를 Startup.cs 파일에 위치한 Configure
메서드의 마지막 부분에 추가합니다:
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
SeedData.Initialize(app.ApplicationServices);
}
응용 프로그램 테스트하기
- 브라우저에서 delete 링크를 하나씩 클릭하거나 SSOX를 이용해서 데이터베이스에서 기존 레코드를 모두 삭제합니다.
-
응용 프로그램을 강제로 초기화시켜서(
Startup
클래스의 메서드들이 호출되도록) 시드 메서드가 실행되도록 합니다. 초기화를 강제로 수행하려면 IIS Express를 중지했다가 재시작해야 합니다. 다음 그림에 표시된 버튼을 이용해서 IIS Express를 재시작 할 수 있습니다:
노트
만약 데이터베이스가 초기화되지 않는다면, if (context.Movie.Any())
줄에 중단점을 설정하고 디버그 모드에서 응용 프로그램을 시작해보십시오.
이제 응용 프로그램에 시드된 데이터가 반영되어 나타나는 것을 확인하실 수 있을 것입니다.
- 파트 1: ASP.NET Core MVC - 시작하기 2016-05-28 08:00
- 파트 2: ASP.NET Core MVC - 컨트롤러 추가하기 2016-06-02 08:00
- 파트 3: ASP.NET Core MVC - 뷰 추가하기 2016-06-06 08:00
- 파트 4: ASP.NET Core MVC - 모델 추가하기 2016-06-13 08:00
- 파트 5: ASP.NET Core MVC - SQL Server LocalDB로 작업하기 2016-06-17 08:00
- 파트 6: ASP.NET Core MVC - 컨트롤러 메서드와 뷰 살펴보기 2016-06-24 08:00
- 파트 7: ASP.NET Core MVC - 검색 기능 추가하기 2016-07-01 08:00
- 파트 8: ASP.NET Core MVC - 새로운 필드 추가하기 2016-07-08 08:00
- 파트 9: ASP.NET Core MVC - 유효성 검사 추가하기 2016-07-11 08:00
- 파트 10: ASP.NET Core MVC - Details 메서드 및 Delete 메서드 살펴보기 2016-07-15 08:00