이전 강좌에서 생성한 MovieDBContext
클래스는 데이터베이스를 연결하고 Movie
객체가 데이터베이스 레코드에 매핑되는
일련의 작업을 처리합니다. 아마도 여러분이 궁금해할 문제 중 하나는 연결할 데이터베이스를 어떻게 지정하는가일 것입니다.
사실, 명시적으로 데이터베이스를 지정할 필요는 없습니다. 엔티티 프레임워크가 LocalDB
를 사용하도록 자동으로 지정하기 때문입니다. 이번 강좌에서는 개발자가 명시적으로 연결 문자열을 어플리케이션의 Web.config 파일에
추가하는 것에 대해 알아보겠습니다.
SQL 서버 익스프레스 LocalDB
SQL 서버 익스프레스 데이터베이스 엔진은 요구가 있을 때 시동되며 user mode(역자 주; Windows 운영체제의 kernel mode 에 대비되는 개념. User mode에서 동작하는 어플리케이션은 메모리 접근에 제한적임)에서 동작합니다.
LocalDB는 SQL 서버 익스프레스 데이터베이스 엔진의 경량 버전입니다. LocalDB는 SQL 서버 익스프레스의 특별 수행 모드에서 동작하는데 이런 환경을 통해 개발자가 .mdf 파일 같은 데이터베이스와 작업할 수 있게 됩니다. LocalDB 데이터베이스 파일들은 보통 웹 프로젝트의 App_Data 폴더에 보관됩니다.
SQL 서버 익스프레스를 운영환경에서 사용하는 것은 추천되지 않습니다. 더욱이 LocalDB는 IIS와 동작하도록 설계되지 않았으므로 사용할 수 없습니다. 다행이도 LocalDB 데이터베이스는 SQL 서버 또는 SQL 애저로 쉽게 마이그레이션됩니다.
비주얼 스튜디오 2013과 2012에서 LocalDB는 비주얼 스튜디오 설치시 기본으로 설치됩니다.
엔티티 프레임워크가 연결 문자열을 찾을 때, 컨텍스트 클래스(이 프로젝트에서는 MovieDBContext
)의 이름과 같은 연결 문자열을 기본적으로 찾습니다. 자세한 정보는 SQL Server Connection Strings for ASP.NET Web Applications를 참조하세요.
아래와 같이 어플리케이션의 루트에 있는 Web.config 파일을 엽니다. (Views 폴더에도 존재하니 유의하세요)
<connectionStrings>
요소를 찾습니다.
다음의 연결 문자열을 Web.config 파일의 <connectionStrings>
요소에 추가합니다.
<add name="MovieDBContext"
connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\Movies.mdf;
Integrated Security=True"
providerName="System.Data.SqlClient"
/>
다음은 새 연결 문자열이 추가된 모습입니다.
<connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;
AttachDbFilename=|DataDirectory|\aspnet-MvcMovie-20130603030321.mdf;
Initial Catalog=aspnet-MvcMovie-20130603030321;Integrated Security=True"
providerName="System.Data.SqlClient" />
<add name="MovieDBContext" connectionString="Data Source=(LocalDB)\v11.0;
AttachDbFilename=|DataDirectory|\Movies.mdf;Integrated Security=True"
providerName="System.Data.SqlClient"
/>
두개의 연결 문자열은 매우 유사합니다. 첫번째 것은 DefaultConnection
라는 이름을 갖고 어플리케이션의 사용자를 관리하는 멤버쉽 데이터에 접근하는데 사용됩니다. 여러분이 방금 추가한 연결 문자열은 App_Data 폴더에 위치한 Movie.mdf 라는 LocalDB 데이터베이스를 지정하고 있습니다. 이 강좌에서는 멤버쉽 데이터베이스를 사용하지 않을 겁니다. 멤버쉽, 인증, 보안과 관련된 자세한 사항은 저자의 다른 강좌, Deploy a Secure ASP.NET MVC app with Membership, OAuth, and SQL Database to a Windows Azure Web Site 를 참고하세요.
연결 문자열의 이름은 DbContext 클래스의 이름과 반드시 일치해야 합니다.
using System;
using System.Data.Entity;
namespace MvcMovie.Models
{
public class Movie
{
public int ID { get; set; }
public string Title { get; set; }
public DateTime ReleaseDate { get; set; }
public string Genre { get; set; }
public decimal Price { get; set; }
}
public class MovieDBContext : DbContext
{
public DbSet<Movie> Movies { get; set; }
}
}
사실, MovieDBContext
에 해당하는 연결 문자열을 꼭 추가할 필요는 없습니다. 여러분이 연결 문자열을 지정하지 않으면 DbContext 클래스의 정규화된 이름 (이 프로젝트의 경우, MvcMovie.Models.MovieDBContext
) 으로 엔티티 프레임워크가 사용자 디렉토리에 LocalDB 데이터베이스를
생성합니다.
데이터베이스의 이름은 .MDF 확장자를 붙여서 여러분이 원하는 대로 지정할 수 있습니다. 예를 들면, MyFilmes.mdf 와 같이 만들 수 있습니다.
다음 강좌에서는 영화 데이터를 보여주고 사용자로 하여금 새로운 영화를 추가하게 하는 MoviesController
컨트롤러를 작성하도록 하겠습니다.