login register Sysop! about ME  
qrcode
    최초 작성일 :    2016년 06월 20일
  최종 수정일 :    2016년 06월 20일
  작성자 :    soggun
  편집자 :    soggun (송원석)
  읽음수 :    15,431

강좌 목록으로 돌아가기

필자의 잡담~

이번 컬럼은 ASP.NET Core MVC 강좌의 5 /10 번째 글입니다.

모든 컬럼은 http://docs.asp.net의 내용을 참고하여 번역한 것입니다. Windows 뿐만 아니라 Linxu, OS X에서도 동작하는 완전한 크로스 플랫폼 서버기술인 ASP.NET Core! 기대해 주세요.

본 번역문서는 개인적인 취지로 번역되어 제공되는 문서로, 원문을 비롯한 모든 저작권은 마이크로소프트사에 있습니다. 마이크로소프트사의 요청이 있을 경우, 언제라도 게시가 중단될 수 있습니다. 본 번역문서에는 오역이 포함되어 있을 수 있으며 주석도 번역자 개인의 견해일뿐입니다. 마이크로소프트사는 본 문서의 번역된 내용에 대해 일체의 보장을 하지 않습니다. 번역이 완료된 뒤에도 제품이 업그레이드 되거나 기능이 변경됨에 따라 원문도 변경되거나 보완되었을 수 있으므로 참고하시기 바랍니다.

원문: https://docs.asp.net/en/latest/tutorials/first-mvc-app/working-with-sql.html

SQL Server LocalDB로 작업하기

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 MvcMovie.Data;
using System;
using System.Linq;
using WebApplication2.Models;
 
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()) 줄에 중단점을 설정하고 디버그 모드에서 응용 프로그램을 시작해보십시오.

이제 응용 프로그램에 시드된 데이터가 반영되어 나타나는 것을 확인하실 수 있을 것입니다.


authored by

  boxcar
  2016-06-20(15:43)
캐릭 이미지
잘 봤습니다. 감사합니다~
  jhjh0206
  2016-06-20(19:00)
캐릭 이미지
감사합니다.
  joo28kim
  2017-06-18(22:06)
캐릭 이미지
잘봤습니다^^ 이번에 asp.net core공부를 하면서 프로젝트를 iis서버에 게시하였는데요..
localdb에서 데이터 가져와야하는 페이지는 error가 뜨고 일반 페이지는 정상적으로 나오네
요.. 게시전 디버깅모드에서 잘되었는데.. iis에 게시할때는 설정을 어떻게 해줘야하나요?

  bbigbros
  2017-11-16(17:44)
캐릭 이미지
강의 잘 보고 있습니다. 이번 강의 마지막 예제(데이터베이스 시드하기)에서 Initialize 하
는 부분이 asp.net core 1.0 / asp.net core 2.0 에 따라 내용이 다른 것으로 확인 됐습
니다. 실습하시는 분들은 다음 주소를 참조하시면 됩니다.

https://docs.microsoft.com/en-us/aspnet/core/tutorials/first-mvc-app/working-
with-sql?tabs=aspnetcore2x


 
 
.NET과 Java 동영상 기반의 교육사이트

로딩 중입니다...

서버 프레임워크 지원 : NeoDEEX
based on ASP.NET 3.5
Creative Commons License
{5}
{2} 읽음   :{3} ({4})