ASP.NET MVC 4 모델 및 데이터 액세스ASP.NET MVC 4 Models and Data Access

웹 캠프 팀By Web Camps Team

웹 캠프 교육 키트 다운로드Download Web Camps Training Kit

이 실습 랩에서는 ASP.NET MVC에 대 한 기본 지식이 있다고 가정 합니다.This Hands-on Lab assumes you have basic knowledge of ASP.NET MVC. 이전에 ASP.NET mvc 를 사용 하지 않은 경우 ASP.NET mvc 4 기본 실습 실습을 사용 하는 것이 좋습니다.If you have not used ASP.NET MVC before, we recommend you to go over ASP.NET MVC 4 Fundamentals Hands-on Lab.

이 랩에서는 원본 폴더에 제공 된 샘플 웹 응용 프로그램에 사소한 변경 사항을 적용 하 여 앞에서 설명한 향상 된 기능 및 새로운 기능을 안내 합니다.This lab walks you through the enhancements and new features previously described by applying minor changes to a sample Web application provided in the Source folder.

Note

모든 샘플 코드와 코드 조각은 Microsoft 웹/WebCampTrainingKit 릴리스에서제공 되는 웹 캠프 교육 키트에 포함 되어 있습니다.All sample code and snippets are included in the Web Camps Training Kit, available at Microsoft-Web/WebCampTrainingKit Releases. 이 랩에서 관련 된 프로젝트는 ASP.NET MVC 4 모델 및 데이터 액세스에서 사용할 수 있습니다.The project specific to this lab is available at ASP.NET MVC 4 Models and Data Access.

ASP.NET MVC 기본 실습 랩에서는 하드 코드 된 데이터를 컨트롤러에서 보기 템플릿으로 전달 했습니다.In ASP.NET MVC Fundamentals Hands-on Lab, you have been passing hard-coded data from the Controllers to the View templates. 그러나 실제 웹 응용 프로그램을 빌드하기 위해 실제 데이터베이스를 사용 하는 것이 좋습니다.But, in order to build a real Web application, you might want to use a real database.

이 실습 랩에서는 Music Store 응용 프로그램에 필요한 데이터를 저장 하 고 검색 하기 위해 데이터베이스 엔진을 사용 하는 방법을 보여 줍니다.This Hands-on Lab will show you how to use a database engine in order to store and retrieve the data needed for the Music Store application. 이렇게 하려면 기존 데이터베이스로 시작 하 고이 데이터베이스에서 엔터티 데이터 모델를 만듭니다.To accomplish that, you will start with an existing database and create the Entity Data Model from it. 이 랩에서는 Database First 접근 방식 뿐만 아니라 Code First 방법도 충족 합니다.Throughout this lab, you will meet the Database First approach as well as the Code First approach.

그러나 Model First 방법을 사용 하 고 도구를 사용 하 여 동일한 모델을 만든 다음 여기에서 데이터베이스를 생성할 수도 있습니다.However, you can also use the Model First approach, create the same model using the tools, and then generate the database from it.

Database First와 Model First 비교Database First vs. Model First

Database First와 Model First 비교Database First vs. Model First

모델을 생성 한 후에는 하드 코드 된 데이터를 사용 하는 대신 StoreController에서 적절 하 게 조정 하 여 데이터베이스에서 가져온 데이터와 저장소 뷰를 제공 합니다.After generating the Model, you will make the proper adjustments in the StoreController to provide the Store Views with the data taken from the database, instead of using hard-coded data. 이번에는 데이터가 데이터베이스에서 제공 되는 경우를 비롯 하 여 StoreController가 뷰 템플릿에 대해 동일한 ViewModels를 반환 하기 때문에 뷰 템플릿을 변경할 필요가 없습니다.You will not need to make any change to the View templates because the StoreController will be returning the same ViewModels to the View templates, although this time the data will come from the database.

Code First 방법The Code First Approach

Code First 방법을 사용 하면 일반적으로 프레임 워크와 결합 된 클래스를 생성 하지 않고 코드에서 모델을 정의할 수 있습니다.The Code First approach allows us to define the model from the code without generating classes that are generally coupled with the framework.

Code first에서 모델 개체는 POCOs, "일반 이전 CLR 개체"를 사용 하 여 정의 됩니다.In code first, model objects are defined with POCOs, "Plain Old CLR Objects". POCOs는 상속이 없고 인터페이스를 구현 하지 않는 간단한 일반 클래스입니다.POCOs are simple plain classes that have no inheritance and do not implement interfaces. 데이터베이스를 자동으로 생성 하거나 기존 데이터베이스를 사용 하 고 코드에서 클래스 매핑을 생성할 수 있습니다.We can automatically generate the database from them, or we can use an existing database and generate the class mapping from the code.

이 방법을 사용할 경우의 이점은 POCOs 클래스가 매핑 프레임 워크와 결합 되지 않으므로 모델은 지 속성 프레임 워크 (이 경우 Entity Framework)와 독립적으로 유지 된다는 것입니다.The benefits of using this approach is that the Model remains independent from the persistence framework (in this case, Entity Framework), as the POCOs classes are not coupled with the mapping framework.

Note

이 랩은이 실습 랩에 표시 된 기능에 맞게 사용자 지정 및 최소화 된 ASP.NET MVC 4 및 버전의 Music Store 샘플 응용 프로그램을 기반으로 합니다.This Lab is based on ASP.NET MVC 4 and a version of the Music Store sample application customized and minimized to fit only the features shown in this Hands-On Lab.

전체 음악 스토어 자습서 응용 프로그램을 탐색 하려는 경우 MVC-음악 스토어에서 찾을 수 있습니다.If you wish to explore the whole Music Store tutorial application you can find it in MVC-Music-Store.

사전 요구 사항Prerequisites

이 랩을 완료 하려면 다음 항목이 있어야 합니다.You must have the following items to complete this lab:

설치 프로그램Setup

코드 조각 설치Installing Code Snippets

편의를 위해이 랩에서 관리 하는 대부분의 코드는 Visual Studio 코드 조각으로 사용할 수 있습니다.For convenience, much of the code you will be managing along this lab is available as Visual Studio code snippets. 코드 조각을 설치 하려면 .\Source\Setup\CodeSnippets.vsi 파일을 실행 합니다.To install the code snippets run .\Source\Setup\CodeSnippets.vsi file.

Visual Studio Code 코드 조각에 대해 잘 모르는 경우이를 사용 하는 방법을 알아보려면이 문서의 부록 C: 코드 조각"사용 "부록을 참조할 수 있습니다.If you are not familiar with the Visual Studio Code Snippets, and want to learn how to use them, you can refer to the appendix from this document "Appendix C: Using Code Snippets".


실습Exercises

이 실습 랩은 다음 연습으로 구성 됩니다.This Hands-on Lab is comprised by the following exercises:

  1. 연습 1: 데이터베이스 추가Exercise 1: Adding a Database
  2. 연습 2: Code First을 사용 하 여 데이터베이스 만들기Exercise 2: Creating a Database using Code First
  3. 연습 3: 매개 변수를 사용 하 여 데이터베이스 쿼리Exercise 3: Querying the Database with Parameters

Note

각 연습에는 연습을 완료 한 후 얻게 되는 결과 솔루션을 포함 하는 폴더가 함께 제공 됩니다.Each exercise is accompanied by an End folder containing the resulting solution you should obtain after completing the exercises. 연습을 진행 하는 데 도움이 필요한 경우이 솔루션을 지침으로 사용할 수 있습니다.You can use this solution as a guide if you need additional help working through the exercises.

이 랩을 완료 하는 데 소요 되는 예상 시간: 35 분Estimated time to complete this lab: 35 minutes.

연습 1: 데이터베이스 추가Exercise 1: Adding a Database

이 연습에서는 데이터를 사용 하기 위해 MusicStore 응용 프로그램의 테이블이 포함 된 데이터베이스를 솔루션에 추가 하는 방법에 대해 설명 합니다.In this exercise, you will learn how to add a database with the tables of the MusicStore application to the solution in order to consume its data. 데이터베이스가 모델을 사용 하 여 생성 되 고 솔루션에 추가 된 후에는 하드 코드 된 값을 사용 하는 대신 데이터베이스에서 가져온 데이터를 뷰 템플릿에 제공 하도록 StoreController 클래스를 수정 합니다.Once the database is generated with the model, and added to the solution, you will modify the StoreController class to provide the View template with the data taken from the database, instead of using hard-coded values.

작업 1-데이터베이스 추가Task 1 - Adding a Database

이 태스크에서는 MusicStore 응용 프로그램의 주 테이블이 포함 된 이미 생성 된 데이터베이스를 솔루션에 추가 합니다.In this task, you will add an already created database with the main tables of the MusicStore application to the solution.

  1. Source/Ex1-AddingADatabaseDBFirst/begin/ 폴더에 있는 시작 솔루션을 엽니다.Open the Begin solution located at Source/Ex1-AddingADatabaseDBFirst/Begin/ folder.

    1. 계속 하기 전에 일부 누락 된 NuGet 패키지를 다운로드 해야 합니다.You will need to download some missing NuGet packages before continue. 이렇게 하려면 프로젝트 메뉴를 클릭 하 고 NuGet 패키지 관리를 선택 합니다.To do this, click the Project menu and select Manage NuGet Packages.

    2. NuGet 패키지 관리 대화 상자에서 복원 을 클릭 하 여 누락 된 패키지를 다운로드 합니다.In the Manage NuGet Packages dialog, click Restore in order to download missing packages.

    3. 마지막으로 빌드 | 솔루션 빌드를 클릭 하 여 솔루션을 빌드합니다.Finally, build the solution by clicking Build | Build Solution.

      Note

      NuGet을 사용 하는 경우의 장점 중 하나는 프로젝트의 모든 라이브러리를 제공 하 여 프로젝트 크기를 줄이는 것이 없다는 것입니다.One of the advantages of using NuGet is that you don't have to ship all the libraries in your project, reducing the project size. NuGet 파워 도구를 사용 하 여 패키지 .config 파일에 패키지 버전을 지정 하면 프로젝트를 처음 실행할 때 필요한 모든 라이브러리를 다운로드할 수 있습니다.With NuGet Power Tools, by specifying the package versions in the Packages.config file, you will be able to download all the required libraries the first time you run the project. 이 경우이 랩에서 기존 솔루션을 연 후 이러한 단계를 실행 해야 합니다.This is why you will have to run these steps after you open an existing solution from this lab.

  2. MvcMusicStore 데이터베이스 파일을 추가 합니다.Add MvcMusicStore database file. 이 실습 랩에서는 이미 생성 된 MvcMusicStore라는 데이터베이스를 사용 합니다.In this Hands-on Lab, you will use an already created database called MvcMusicStore.mdf. 이렇게 하려면 앱_데이터 폴더를 마우스 오른쪽 단추로 클릭 하 고 추가 를 가리킨 다음 기존 항목을 클릭 합니다.To do that, right-click App_Data folder, point to Add and then click Existing Item. \Source\sts\source\asset 로 이동 하 여 MvcMusicStore 파일을 선택 합니다.Browse to \Source\Assets and select the MvcMusicStore.mdf file.

    기존 항목 추가Adding an Existing Item

    기존 항목 추가Adding an Existing Item

    MvcMusicStore 데이터베이스 파일MvcMusicStore.mdf database file

    MvcMusicStore 데이터베이스 파일MvcMusicStore.mdf database file

    데이터베이스가 프로젝트에 추가 되었습니다.The database has been added to the project. 데이터베이스가 솔루션 내에 있는 경우에도 다른 데이터베이스 서버에서 호스팅되는 것으로 쿼리 및 업데이트할 수 있습니다.Even when the database is located inside the solution, you can query and update it as it was hosted in a different database server.

    솔루션 탐색기의 MvcMusicStore 데이터베이스MvcMusicStore database in Solution Explorer

    솔루션 탐색기의 MvcMusicStore 데이터베이스MvcMusicStore database in Solution Explorer

  3. 데이터베이스에 대 한 연결을 확인 합니다.Verify the connection to the database. 이렇게 하려면 MvcMusicStore 를 두 번 클릭 하 여 연결을 설정 합니다.To do this, double-click MvcMusicStore.mdf to establish a connection.

    MvcMusicStore에 연결Connecting to MvcMusicStore.mdf

    MvcMusicStore에 연결Connecting to MvcMusicStore.mdf

작업 2-데이터 모델 만들기Task 2 - Creating a Data Model

이 태스크에서는 이전 태스크에 추가 된 데이터베이스와 상호 작용 하는 데이터 모델을 만듭니다.In this task, you will create a data model to interact with the database added in the previous task.

  1. 데이터베이스를 나타내는 데이터 모델을 만듭니다.Create a data model that will represent the database. 이렇게 하려면 솔루션 탐색기에서 모델 폴더를 마우스 오른쪽 단추로 클릭 하 고 추가 를 가리킨 다음 새 항목을 클릭 합니다.To do this, in Solution Explorer right-click the Models folder, point to Add and then click New Item. 새 항목 추가 대화 상자에서 데이터 템플릿을 선택 하 고 ADO.NET 엔터티 데이터 모델 항목을 선택 합니다.In the Add New Item dialog, select the Data template and then the ADO.NET Entity Data Model item. 데이터 모델 이름을 Storedb .edmx 로 변경 하 고 추가를 클릭 합니다.Change the data model name to StoreDB.edmx and click Add.

    StoreDB ADO.NET 엔터티 데이터 모델 추가Adding the StoreDB ADO.NET Entity Data Model

    StoreDB ADO.NET 엔터티 데이터 모델 추가Adding the StoreDB ADO.NET Entity Data Model

  2. 엔터티 데이터 모델 마법사 가 나타납니다.The Entity Data Model Wizard will appear. 이 마법사는 모델 계층을 만드는 과정을 안내 합니다.This wizard will guide you through the creation of the model layer. 최근에 추가 된 기존 데이터베이스를 기반으로 모델을 만들어야 하므로 데이터베이스에서 생성 을 선택 하 고 다음을 클릭 합니다.Since the model should be created based on the existing database recently added, select Generate from database and click Next.

    모델 콘텐츠 선택Choosing the model content

    모델 콘텐츠 선택Choosing the model content

  3. 데이터베이스에서 모델을 생성 하기 때문에 사용할 연결을 지정 해야 합니다.Since you are generating a model from a database, you will need to specify the connection to use. 새 연결을 클릭 합니다.Click New Connection.

  4. 데이터베이스 파일 Microsoft SQL Server 선택 하 고 계속을 클릭 합니다.Select Microsoft SQL Server Database File and click Continue.

    데이터 원본 선택Choose data source

    데이터 소스 선택 대화 상자Choose data source dialog

  5. 찾아보기 를 클릭 하 고 App_Data 폴더에 있는 데이터베이스 MvcMusicStore 를 선택 하 고 확인을 클릭 합니다.Click Browse and select the database MvcMusicStore.mdf you located in the App_Data folder and click OK.

    연결 속성Connection properties

    연결 속성Connection properties

  6. 생성 된 클래스의 이름은 엔터티 연결 문자열과 동일 해야 하므로 이름을 MusicStoreEntities 로 변경 하 고 다음을 클릭 합니다.The generated class should have the same name as the entity connection string, so change its name to MusicStoreEntities and click Next.

    데이터 연결 선택Choosing the data connection

    데이터 연결 선택Choosing the data connection

  7. 사용할 데이터베이스 개체를 선택 합니다.Choose the database objects to use. 엔터티 모델은 데이터베이스의 테이블만 사용 하 고, 테이블 옵션을 선택 하 고, 모델에 외래 키 열 포함복수화 또는 단 수 생성 된 개체 이름 옵션도 선택 되어 있는지 확인 합니다.As the Entity Model will use just the database's tables, select the Tables option, and make sure that the Include foreign key columns in the model and Pluralize or singularize generated object names options are also selected. 모델 네임 스페이스를 MvcMusicStore 로 변경 하 고 마침을 클릭 합니다.Change the Model Namespace to MvcMusicStore.Model and click Finish.

    데이터베이스 개체 선택Choosing the database objects

    데이터베이스 개체 선택Choosing the database objects

    Note

    보안 경고 대화 상자가 표시 되 면 확인 을 클릭 하 여 템플릿을 실행 하 고 모델 엔터티에 대 한 클래스를 생성 합니다.If a Security Warning dialog is shown, click OK to run the template and generate the classes for the model entities.

  8. 데이터베이스에 대 한 엔터티 다이어그램이 표시 되는 반면, 각 테이블을 데이터베이스에 매핑하는 별도의 클래스가 생성 됩니다.An entity diagram for the database will appear, while a separate class that maps each table to the database will be created. 예를 들어 앨범 테이블은 앨범 클래스로 표현 되며, 여기서 테이블의 각 열은 클래스 속성에 매핑됩니다.For example, the Albums table will be represented by an Album class, where each column in the table will map to a class property. 이렇게 하면 데이터베이스의 행을 나타내는 개체를 쿼리하고 작업할 수 있습니다.This will allow you to query and work with objects that represent rows in the database.

    엔터티 다이어그램Entity diagram

    엔터티 다이어그램Entity diagram

    Note

    T4 템플릿 (.tt)은 엔터티 클래스를 생성 하는 코드를 실행 하 고 같은 이름의 기존 클래스를 덮어씁니다.The T4 templates (.tt) run code to generate the entities classes and will overwrite the existing classes with the same name. 이 예제에서는 "앨범", "장르" 및 "음악가" 생성 된 코드로 덮어쓴 클래스입니다.In this example, the classes "Album", "Genre" and "Artist" were overwritten with the generated code.

작업 3-응용 프로그램 빌드Task 3 - Building the Application

이 태스크에서는 모델 생성이 앨범, 장르음악가 모델 클래스를 제거 했지만 새 데이터 모델 클래스를 사용 하 여 프로젝트가 성공적으로 빌드 되었는지 확인 합니다.In this task, you will check that, although the model generation have removed the Album, Genre and Artist model classes, the project builds successfully by using the new data model classes.

  1. 빌드 메뉴 항목을 선택한 다음 MvcMusicStore 빌드를 선택 하 여 프로젝트를 빌드합니다.Build the project by selecting the Build menu item and then Build MvcMusicStore.

    프로젝트 빌드Building the project

    프로젝트 빌드Building the project

  2. 프로젝트가 성공적으로 빌드됩니다.The project builds successfully. 그래도 작동 하는 이유는 무엇 인가요?Why does it still work? 데이터베이스 테이블에는 제거 된 클래스의 앨범장르에서 사용 하는 속성을 포함 하는 필드가 있기 때문에 작동 합니다.It works because the database tables have fields that include the properties that you were using in the removed classes Album and Genre.

    빌드 성공Builds succeeded

    빌드 성공Builds succeeded

  3. 디자이너에서 엔터티를 다이어그램 형식으로 표시 하는 동안 해당 엔터티는 C# 정말 클래스입니다.While the designer displays the entities in a diagram format, they are really C# classes. 솔루션 탐색기에서 Storedb .edmx 노드를 확장 한 다음 StoreDB.tt를 확장 하면 새로 생성 된 엔터티가 표시 됩니다.Expand the StoreDB.edmx node in the Solution Explorer and then StoreDB.tt, you will see the new generated entities.

    생성된 파일Generated files

    생성된 파일Generated files

작업 4-데이터베이스 쿼리Task 4 - Querying the Database

이 작업에서는 하드 코드 된 데이터를 사용 하는 대신 데이터베이스를 쿼리하여 정보를 검색 하도록 StoreController 클래스를 업데이트 합니다.In this task, you will update the StoreController class so that, instead of using hardcoded data, it will query the database to retrieve the information.

  1. Controllers\StoreController.cs 을 열고 클래스에 다음 필드를 추가 하 여 Storedb라는 MusicStoreEntities 클래스의 인스턴스를 포함 합니다.Open Controllers\StoreController.cs and add the following field to the class to hold an instance of the MusicStoreEntities class, named storeDB:

    (코드 조각- 모델 및 데이터 액세스-Ex1 storeDB)(Code Snippet - Models And Data Access - Ex1 storeDB)

    public class StoreController : Controller
    {
        private MusicStoreEntities storeDB = new MusicStoreEntities();
    
  2. MusicStoreEntities 클래스는 데이터베이스의 각 테이블에 대 한 컬렉션 속성을 노출 합니다.The MusicStoreEntities class exposes a collection property for each table in the database. 모든 앨범이포함 된 장르를 검색 하도록 찾아보기 작업 메서드를 업데이트 합니다.Update Browse action method to retrieve a Genre with all of the Albums.

    (코드 조각- 모델 및 데이터 액세스-Ex1 저장소 찾아보기)(Code Snippet - Models And Data Access - Ex1 Store Browse)

    public ActionResult Browse(string genre)
    {
        // Retrieve Genre and its Associated Albums from database
        var genreModel = new Genre
        {
            Name = genre,
            Albums = this.storeDB.Albums.ToList()
        };
    
        return this.View(genreModel);
    }
    

    Note

    LINQ (언어 통합 쿼리) 라는 .net 기능을 사용 하 여 이러한 컬렉션에 대해 강력한 형식의 쿼리 식을 작성 합니다 .이 기능을 사용 하면 데이터베이스에 대해 코드를 실행 하 고 프로그래밍할 수 있는 개체를 반환 합니다.You are using a capability of .NET called LINQ (language-integrated query) to write strongly-typed query expressions against these collections - which will execute code against the database and return objects that you can program against.

    LINQ에 대 한 자세한 내용은 msdn 사이트를 참조 하십시오.For more information about LINQ, please visit the msdn site.

  3. 인덱스 작업 메서드를 업데이트 하 여 모든 장르를 검색 합니다.Update Index action method to retrieve all the genres.

    (코드 조각- 모델 및 데이터 액세스-Ex1 저장소 인덱스)(Code Snippet - Models And Data Access - Ex1 Store Index)

    public ActionResult Index()
    {
        var genres = this.storeDB.Genres;
    
        return this.View(genres);
    }
    
  4. 인덱스 작업 메서드를 업데이트 하 여 모든 장르를 검색 하 고 컬렉션을 목록으로 변환 합니다.Update Index action method to retrieve all the genres and transform the collection to a list.

    (코드 조각- 모델 및 데이터 액세스-Ex1 저장소 GenreMenu)(Code Snippet - Models And Data Access - Ex1 Store GenreMenu)

    // GET: /Store/GenreMenu
    [ChildActionOnly]
    public ActionResult GenreMenu()
    {
        var genres = this.storeDB.Genres.Take(9).ToList();
    
        return this.PartialView(genres);
    }
    

작업 5-응용 프로그램 실행Task 5 - Running the Application

이 태스크에서는 저장소 인덱스 페이지에 하드 코드 된 항목이 아니라 데이터베이스에 저장 된 장르가 표시 되는지 확인 합니다.In this task, you will check that the Store Index page will now display the Genres stored in the database instead of the hardcoded ones. StoreController 는 이전과 동일한 엔터티를 반환 하기 때문에 뷰 템플릿을 변경할 필요가 없습니다. 하지만 이번에는 데이터가 데이터베이스에서 제공 됩니다.There is no need to change the View template because the StoreController is returning the same entities as before, although this time the data will come from the database.

  1. 솔루션을 다시 빌드하고 F5 키를 눌러 응용 프로그램을 실행 합니다.Rebuild the solution and press F5 to run the Application.

  2. 프로젝트가 홈 페이지에서 시작 됩니다.The project starts in the Home page. 장르 메뉴가 더 이상 하드 코드 된 목록이 아닌지 확인 하 고 데이터가 데이터베이스에서 직접 검색 되는지 확인 합니다.Verify that the menu of Genres is no longer a hardcoded list, and the data is directly retrieved from the database.

    BrowsingGenresFromDataBase

    데이터베이스에서 장르 검색Browsing Genres from the database

  3. 이제 장르로 이동 하 여 데이터베이스에서 앨범이 채워지는지 확인 합니다.Now browse to any genre and verify the albums are populated from database.

    데이터베이스에서 앨범 찾아보기Browsing Albums from the database

    데이터베이스에서 앨범 찾아보기Browsing Albums from the database

연습 2: Code First을 사용 하 여 데이터베이스 만들기Exercise 2: Creating a Database Using Code First

이 연습에서는 MusicStore 응용 프로그램의 테이블을 사용 하 여 데이터베이스를 만드는 방법 및 해당 데이터에 액세스 하는 방법을 설명 Code First 합니다.In this exercise, you will learn how to use the Code First approach to create a database with the tables of the MusicStore application, and how to access its data.

모델을 생성 한 후에는 하드 코드 된 값을 사용 하는 대신 데이터베이스에서 가져온 데이터를 사용 하 여 뷰 템플릿을 제공 하도록 StoreController를 수정 합니다.Once the model is generated, you will modify the StoreController to provide the View template with the data taken from the database, instead of using hardcoded values.

Note

연습 1을 완료 하 고 이미 Database First 방식으로 작업 한 경우 다른 프로세스를 사용 하 여 동일한 결과를 얻는 방법을 배우게 됩니다.If you have completed Exercise 1 and have already worked with the Database First approach, you will now learn how to get the same results with a different process. 실습 1과 관련 된 작업은 더 쉽게 읽을 수 있도록 표시 되어 있습니다.The tasks that are in common with Exercise 1 have been marked to make your reading easier. 연습 1을 완료 하지 않았지만 Code First 방법을 배우는 경우이 연습에서 시작 하 여 토픽의 전체 검사를 수행할 수 있습니다.If you have not completed Exercise 1 but would like to learn the Code First approach, you can start from this exercise and get a full coverage of the topic.

작업 1-샘플 데이터 채우기Task 1 - Populating Sample Data

이 태스크에서는 처음 코드를 사용 하 여 만들 때 샘플 데이터를 사용 하 여 데이터베이스를 채웁니다.In this task, you will populate the database with sample data when it is initially created using Code-First.

  1. Source/Ex2-CreatingADatabaseCodeFirst/begin/ 폴더에 있는 시작 솔루션을 엽니다.Open the Begin solution located at Source/Ex2-CreatingADatabaseCodeFirst/Begin/ folder. 그렇지 않으면 이전 연습을 완료 하 여 얻은 종료 솔루션을 계속 사용할 수 있습니다.Otherwise, you might continue using the End solution obtained by completing the previous exercise.

    1. 제공 된 시작 솔루션을 연 경우 계속 하기 전에 일부 누락 된 NuGet 패키지를 다운로드 해야 합니다.If you opened the provided Begin solution, you will need to download some missing NuGet packages before continue. 이렇게 하려면 프로젝트 메뉴를 클릭 하 고 NuGet 패키지 관리를 선택 합니다.To do this, click the Project menu and select Manage NuGet Packages.

    2. NuGet 패키지 관리 대화 상자에서 복원 을 클릭 하 여 누락 된 패키지를 다운로드 합니다.In the Manage NuGet Packages dialog, click Restore in order to download missing packages.

    3. 마지막으로 빌드 | 솔루션 빌드를 클릭 하 여 솔루션을 빌드합니다.Finally, build the solution by clicking Build | Build Solution.

      Note

      NuGet을 사용 하는 경우의 장점 중 하나는 프로젝트의 모든 라이브러리를 제공 하 여 프로젝트 크기를 줄이는 것이 없다는 것입니다.One of the advantages of using NuGet is that you don't have to ship all the libraries in your project, reducing the project size. NuGet 파워 도구를 사용 하 여 패키지 .config 파일에 패키지 버전을 지정 하면 프로젝트를 처음 실행할 때 필요한 모든 라이브러리를 다운로드할 수 있습니다.With NuGet Power Tools, by specifying the package versions in the Packages.config file, you will be able to download all the required libraries the first time you run the project. 이 경우이 랩에서 기존 솔루션을 연 후 이러한 단계를 실행 해야 합니다.This is why you will have to run these steps after you open an existing solution from this lab.

  2. 모델 폴더에 SampleData.cs 파일을 추가 합니다.Add the SampleData.cs file to the Models folder. 이렇게 하려면 모델 폴더를 마우스 오른쪽 단추로 클릭 하 고 추가 를 가리킨 다음 기존 항목을 클릭 합니다.To do that, right-click Models folder, point to Add and then click Existing Item. \Source\sts\source\stl 을 찾아 SampleData.cs 파일을 선택 합니다.Browse to \Source\Assets and select the SampleData.cs file.

    샘플 데이터 채우기 코드Sample data populate code

    샘플 데이터 채우기 코드Sample data populate code

  3. Global.asax.cs 파일을 열고 다음 using 문을 추가 합니다.Open the Global.asax.cs file and add the following using statements.

    (코드 조각- 모델 및 데이터 액세스-Ex2 Global Global.asax using)(Code Snippet - Models And Data Access - Ex2 Global Asax Usings)

    using MvcMusicStore.Models;
    using System.Data.Entity;
    
  4. 응용 프로그램_Start () 메서드에서 다음 줄을 추가 하 여 데이터베이스 이니셜라이저를 설정 합니다.In the Application_Start() method add the following line to set the database initializer.

    (코드 조각- 모델 및 데이터 액세스-Ex2 Global Global.asax SetInitializer)(Code Snippet - Models And Data Access - Ex2 Global Asax SetInitializer)

    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
    
        WebApiConfig.Register(GlobalConfiguration.Configuration);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
    
        Database.SetInitializer(new SampleData());
    }
    

작업 2-데이터베이스에 대 한 연결 구성Task 2 - Configuring the connection to the Database

프로젝트에 데이터베이스를 이미 추가 했으므로 이제는 web.config 파일에 연결 문자열을 작성 합니다.Now that you have already added a database to our project, you will write in the Web.config file the connection string.

  1. Web.config에 연결문자열을 추가 합니다. 이렇게 하려면 프로젝트 루트에서 web.config를 열고 defaultconnection 이라는 연결 문자열을 <connectionStrings> 섹션에서 다음 줄로 바꿉니다.Add a connection string at Web.config. To do that, open Web.config at project root and replace the connection string named DefaultConnection with this line in the <connectionStrings> section:

    Web.config 파일 위치Web.config file location

    Web.config 파일 위치Web.config file location

    <configuration>
    ...
      <connectionStrings>
        <add name="MusicStoreEntities" connectionString="data source=(LocalDb)\v11.0;initial catalog=MvcMusicStore;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\MvcMusicStore.mdf" providerName="System.Data.SqlClient" />
      </connectionStrings>
    ...
    

작업 3-모델 작업Task 3 - Working with the Model

데이터베이스에 대 한 연결을 이미 구성 했으므로 모델을 데이터베이스 테이블과 연결 합니다.Now that you have already configured the connection to the database, you will link the model with the database tables. 이 태스크에서는 Code First를 사용 하 여 데이터베이스에 연결 되는 클래스를 만듭니다.In this task, you will create a class that will be linked to the database with Code First. 수정 해야 하는 POCO 모델 클래스가 존재 한다는 점에 주의 해야 합니다.Remember that there is an existent POCO model class that should be modified.

Note

연습 1을 완료 한 경우 마법사에서이 단계를 수행 했는지 확인 합니다.If you completed Exercise 1, you will note that this step was performed by a wizard. Code First를 수행 하 여 데이터 엔터티에 연결 되는 클래스를 수동으로 만듭니다.By doing Code First, you will manually create classes that will be linked to data entities.

  1. 모델 프로젝트 폴더에서 POCO 모델 클래스 장르 를 열고 ID를 포함 합니다.Open the POCO model class Genre from Models project folder and include an ID. 이름이 GenreId인 int 속성을 사용 합니다.Use an int property with the name GenreId.

    (코드 조각- 모델 및 데이터 액세스-Ex2 Code First 장르)(Code Snippet - Models And Data Access - Ex2 Code First Genre)

    namespace MvcMusicStore.Models
    {
        using System.Collections.Generic;
    
        public class Genre
        {
          public int GenreId { get; set; }
    
          public string Name { get; set; }
    
          public string Description { get; set; }
    
          public List<Album> Albums { get; set; }
        }
    }
    

    Note

    Code First 규칙을 사용 하려면 클래스 장르에 자동으로 검색 되는 기본 키 속성이 있어야 합니다.To work with Code First conventions, the class Genre must have a primary key property that will be automatically detected.

    msdn 문서에서 Code First 규칙에 대해 자세히 알아볼 수 있습니다.You can read more about Code First Conventions in this msdn article.

  2. 이제 모델 프로젝트 폴더에서 POCO 모델 클래스 앨범 을 열고 외래 키를 포함 하 고 이름이 GenreIdArtistId인 속성을 만듭니다.Now, open the POCO model class Album from Models project folder and include the foreign keys, create properties with the names GenreId and ArtistId. 이 클래스에는 기본 키에 대 한 GenreId 이미 있습니다.This class already have the GenreId for the primary key.

    (코드 조각- 모델 및 데이터 액세스-Ex2 Code First 앨범)(Code Snippet - Models And Data Access - Ex2 Code First Album)

    namespace MvcMusicStore.Models
    {
        public class Album
        {
            public int AlbumId { get; set; }
    
            public int GenreId { get; set; }
    
            public int ArtistId { get; set; }
    
            public string Title { get; set; }
    
            public decimal Price { get; set; }
    
            public string AlbumArtUrl { get; set; }
    
            public virtual Genre Genre { get; set; }
    
            public virtual Artist Artist { get; set; }
        }
    }
    
  3. POCO 모델 클래스 음악가 를 열고 ArtistId 속성을 포함 합니다.Open the POCO model class Artist and include the ArtistId property.

    (코드 조각- 모델 및 데이터 액세스-Ex2 Code First 음악가)(Code Snippet - Models And Data Access - Ex2 Code First Artist)

    namespace MvcMusicStore.Models
    {
        public class Artist
        {
            public int ArtistId { get; set; }
    
            public string Name { get; set; }
        }
    }
    
  4. 모델 프로젝트 폴더를 마우스 오른쪽 단추로 클릭 하 고 추가 |를 선택 합니다. 클래스.Right-click the Models project folder and select Add | Class. 파일 이름을 MusicStoreEntities.cs로 합니다.Name the file MusicStoreEntities.cs. 그런 다음 추가를 클릭 합니다.Then, click Add.

    클래스 추가Adding a class

    새 항목 추가Adding a new item

    Class2 추가Adding a class2

    클래스 추가Adding a class

  5. 방금 만든 클래스를 MusicStoreEntities.cs 하 고 네임 스페이스 를 포함 하 여 네임 스페이스를 엽니다.Open the class you have just created, MusicStoreEntities.cs, and include the namespaces System.Data.Entity and System.Data.Entity.Infrastructure.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Data.Entity;
    using System.Data.Entity.Infrastructure;
    ...
    
  6. DbContext 클래스를 확장 하도록 클래스 선언을 바꿉니다. Public dbset 을 선언 하 고 onmodelcreating 메서드를 재정의 합니다.Replace the class declaration to extend the DbContext class: declare a public DBSet and override OnModelCreating method. 이 단계를 수행한 후에는 모델을 Entity Framework와 연결 하는 도메인 클래스를 받게 됩니다.After this step you will get a domain class that will link your model with the Entity Framework. 이렇게 하려면 클래스 코드를 다음 코드로 바꿉니다.In order to do that, replace the class code with the following:

    (코드 조각- 모델 및 데이터 액세스-Ex2 Code First MusicStoreEntities)(Code Snippet - Models And Data Access - Ex2 Code First MusicStoreEntities)

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Data.Entity;
    using System.Data.Entity.Infrastructure;
    
    namespace MvcMusicStore.Models
    {
        public class MusicStoreEntities : DbContext
        {
            public DbSet<Genre> Genres { get; set; }
    
            public DbSet<Album> Albums { get; set; }
    
            public DbSet<Artist> Artists { get; set; }
    
            protected override void OnModelCreating(DbModelBuilder modelBuilder)
            {
                modelBuilder.Entity<Genre>().ToTable("Genres");
                modelBuilder.Entity<Album>().ToTable("Albums");
                modelBuilder.Entity<Artist>().ToTable("Artists");
    
                base.OnModelCreating(modelBuilder);
            }
        }
    }
    

Note

Entity Framework DbContextdbset 를 사용 하면 POCO 클래스 장르를 쿼리할 수 있습니다.With Entity Framework DbContext and DBSet you will be able to query the POCO class Genre. Onmodelcreating 메서드를 확장 하 여 코드 에서 장르를 데이터베이스 테이블에 매핑하는 방법을 지정 합니다.By extending OnModelCreating method, you are specifying in the code how Genre will be mapped to a database table. DBContext 및 DBSet에 대 한 자세한 내용은 msdn 문서 링크 에서 찾을 수 있습니다.You can find more information about DBContext and DBSet in this msdn article: link

작업 4-데이터베이스 쿼리Task 4 - Querying the Database

이 작업에서는 하드 코드 된 데이터를 사용 하는 대신 데이터베이스에서 StoreController 클래스를 검색 하도록 업데이트 합니다.In this task, you will update the StoreController class so that, instead of using hardcoded data, it will retrieve it from the database.

Note

이 작업은 연습 1에서 일반적으로 사용 됩니다.This task is in common with Exercise 1.

연습 1을 완료 한 경우 이러한 단계는 두 방법 (데이터베이스 first 또는 Code first)에서 동일 합니다.If you completed Exercise 1 you will note these steps are the same in both approaches (Database first or Code first). 모델에 데이터를 연결 하는 방법은 다르지만 데이터 엔터티에 대 한 액세스는 컨트롤러에서 아직 투명 합니다.They are different in how the data is linked with the model, but the access to data entities is yet transparent from the controller.

  1. Controllers\StoreController.cs 을 열고 클래스에 다음 필드를 추가 하 여 Storedb라는 MusicStoreEntities 클래스의 인스턴스를 포함 합니다.Open Controllers\StoreController.cs and add the following field to the class to hold an instance of the MusicStoreEntities class, named storeDB:

    (코드 조각- 모델 및 데이터 액세스-Ex1 storeDB)(Code Snippet - Models And Data Access - Ex1 storeDB)

    public class StoreController : Controller
    {
        private MusicStoreEntities storeDB = new MusicStoreEntities();
        ...
    }
    
  2. MusicStoreEntities 클래스는 데이터베이스의 각 테이블에 대 한 컬렉션 속성을 노출 합니다.The MusicStoreEntities class exposes a collection property for each table in the database. 모든 앨범이포함 된 장르를 검색 하도록 찾아보기 작업 메서드를 업데이트 합니다.Update Browse action method to retrieve a Genre with all of the Albums.

    (코드 조각- 모델 및 데이터 액세스-Ex2 저장소 찾아보기)(Code Snippet - Models And Data Access - Ex2 Store Browse)

    public ActionResult Browse(string genre)
    {
         // Retrieve Genre and its Associated Albums from database
         var genreModel = new Genre
        {
            Name = genre,
            Albums = this.storeDB.Albums.ToList()
        };
    
         return this.View(genreModel);
    }
    

    Note

    LINQ (언어 통합 쿼리) 라는 .net 기능을 사용 하 여 이러한 컬렉션에 대해 강력한 형식의 쿼리 식을 작성 합니다 .이 기능을 사용 하면 데이터베이스에 대해 코드를 실행 하 고 프로그래밍할 수 있는 개체를 반환 합니다.You are using a capability of .NET called LINQ (language-integrated query) to write strongly-typed query expressions against these collections - which will execute code against the database and return objects that you can program against.

    LINQ에 대 한 자세한 내용은 msdn 사이트를 참조 하십시오.For more information about LINQ, please visit the msdn site.

  3. 인덱스 작업 메서드를 업데이트 하 여 모든 장르를 검색 합니다.Update Index action method to retrieve all the genres.

    (코드 조각- 모델 및 데이터 액세스-Ex2 저장소 인덱스)(Code Snippet - Models And Data Access - Ex2 Store Index)

    public ActionResult Index()
    {
        var genres = this.storeDB.Genres;
    
        return this.View(genres);
    }
    
  4. 인덱스 작업 메서드를 업데이트 하 여 모든 장르를 검색 하 고 컬렉션을 목록으로 변환 합니다.Update Index action method to retrieve all the genres and transform the collection to a list.

    (코드 조각- 모델 및 데이터 액세스-Ex2 저장소 GenreMenu)(Code Snippet - Models And Data Access - Ex2 Store GenreMenu)

    // GET: /Store/GenreMenu
    [ChildActionOnly]
    public ActionResult GenreMenu()
    {
        var genres = this.storeDB.Genres.Take(9).ToList();
    
        return this.PartialView(genres);
    }
    

작업 5-응용 프로그램 실행Task 5 - Running the Application

이 태스크에서는 저장소 인덱스 페이지에 하드 코드 된 항목이 아니라 데이터베이스에 저장 된 장르가 표시 되는지 확인 합니다.In this task, you will check that the Store Index page will now display the Genres stored in the database instead of the hardcoded ones. StoreController 가 이전 처럼 동일한 파일 인덱스 viewmodel 을 반환 하지만 이번에는 데이터를 데이터베이스에서 가져올 수 있으므로 뷰 템플릿을 변경할 필요가 없습니다.There is no need to change the View template because the StoreController is returning the same StoreIndexViewModel as before, but this time the data will come from the database.

  1. 솔루션을 다시 빌드하고 F5 키를 눌러 응용 프로그램을 실행 합니다.Rebuild the solution and press F5 to run the Application.

  2. 프로젝트가 홈 페이지에서 시작 됩니다.The project starts in the Home page. 장르 메뉴가 더 이상 하드 코드 된 목록이 아닌지 확인 하 고 데이터가 데이터베이스에서 직접 검색 되는지 확인 합니다.Verify that the menu of Genres is no longer a hardcoded list, and the data is directly retrieved from the database.

    BrowsingGenresFromDataBase

    데이터베이스에서 장르 검색Browsing Genres from the database

  3. 이제 장르로 이동 하 여 데이터베이스에서 앨범이 채워지는지 확인 합니다.Now browse to any genre and verify the albums are populated from database.

    데이터베이스에서 앨범 찾아보기Browsing Albums from the database

    데이터베이스에서 앨범 찾아보기Browsing Albums from the database

연습 3: 매개 변수를 사용 하 여 데이터베이스 쿼리Exercise 3: Querying the Database with Parameters

이 연습에서는 매개 변수를 사용 하 여 데이터베이스를 쿼리 하는 방법 및 쿼리 결과 셰이핑을 사용 하는 방법에 대해 설명 합니다 .이 기능을 사용 하 여 데이터를 보다 효율적으로 검색 하는 데이터베이스 액세스를 줄일 수 있습니다.In this exercise, you will learn how to query the database using parameters, and how to use Query Result Shaping, a feature that reduces the number database accesses retrieving data in a more efficient way.

Note

쿼리 결과 셰이핑에 대 한 자세한 내용은 다음 msdn 문서를 참조 하세요.For further information on Query Result Shaping, visit the following msdn article.

작업 1-StoreController를 수정 하 여 데이터베이스에서 앨범 검색Task 1 - Modifying StoreController to Retrieve Albums from Database

이 작업에서는 데이터베이스에 액세스 하 여 특정 장르에서 앨범을 검색 하도록 StoreController 클래스를 변경 합니다.In this task, you will change the StoreController class to access the database to retrieve albums from a specific genre.

  1. 데이터베이스 우선 방법을 사용 하려는 경우에는 Source\Ex3-QueryingTheDatabaseWithParametersCodeFirst\Begin 폴더에 있는 Begin solution를 엽니다. 여기서는 코드를 처음 사용 하거나 Source\Ex3-QueryingTheDatabaseWithParametersDBFirst\Begin 폴더를 사용 하려는 경우에 사용 합니다.Open the Begin solution located at the Source\Ex3-QueryingTheDatabaseWithParametersCodeFirst\Begin folder if you want to use Code-First approach or Source\Ex3-QueryingTheDatabaseWithParametersDBFirst\Begin folder if you want to use Database-First approach. 그렇지 않으면 이전 연습을 완료 하 여 얻은 종료 솔루션을 계속 사용할 수 있습니다.Otherwise, you might continue using the End solution obtained by completing the previous exercise.

    1. 제공 된 시작 솔루션을 연 경우 계속 하기 전에 일부 누락 된 NuGet 패키지를 다운로드 해야 합니다.If you opened the provided Begin solution, you will need to download some missing NuGet packages before continue. 이렇게 하려면 프로젝트 메뉴를 클릭 하 고 NuGet 패키지 관리를 선택 합니다.To do this, click the Project menu and select Manage NuGet Packages.

    2. NuGet 패키지 관리 대화 상자에서 복원 을 클릭 하 여 누락 된 패키지를 다운로드 합니다.In the Manage NuGet Packages dialog, click Restore in order to download missing packages.

    3. 마지막으로 빌드 | 솔루션 빌드를 클릭 하 여 솔루션을 빌드합니다.Finally, build the solution by clicking Build | Build Solution.

      Note

      NuGet을 사용 하는 경우의 장점 중 하나는 프로젝트의 모든 라이브러리를 제공 하 여 프로젝트 크기를 줄이는 것이 없다는 것입니다.One of the advantages of using NuGet is that you don't have to ship all the libraries in your project, reducing the project size. NuGet 파워 도구를 사용 하 여 패키지 .config 파일에 패키지 버전을 지정 하면 프로젝트를 처음 실행할 때 필요한 모든 라이브러리를 다운로드할 수 있습니다.With NuGet Power Tools, by specifying the package versions in the Packages.config file, you will be able to download all the required libraries the first time you run the project. 이 경우이 랩에서 기존 솔루션을 연 후 이러한 단계를 실행 해야 합니다.This is why you will have to run these steps after you open an existing solution from this lab.

  2. StoreController 클래스를 열어 찾아보기 동작 메서드를 변경 합니다.Open the StoreController class to change the Browse action method. 이렇게 하려면 솔루션 탐색기에서 Controllers 폴더를 확장 하 고 StoreController.cs를 두 번 클릭 합니다.To do this, in the Solution Explorer, expand the Controllers folder and double-click StoreController.cs.

  3. 찾아보기 동작 메서드를 변경 하 여 특정 장르의 앨범을 검색 합니다.Change the Browse action method to retrieve albums for a specific genre. 이렇게 하려면 다음 코드를 바꿉니다.To do this, replace the following code:

    (코드 조각- 모델 및 데이터 액세스-Ex3 StoreController BrowseMethod)(Code Snippet - Models And Data Access - Ex3 StoreController BrowseMethod)

    public ActionResult Browse(string genre)
    {
        // Retrieve Genre and its Associated Albums from database
        var genreModel = this.storeDB.Genres.Include("Albums")
            .Single(g => g.Name == genre);
    
        return this.View(genreModel);
    }
    

Note

엔터티 컬렉션을 채우려면 Include 메서드를 사용 하 여 앨범을 검색 하도록 지정 해야 합니다.To populate a collection of the entity, you need to use the Include method to specify you want to retrieve the albums too. 을 사용할 수 있습니다. 단일 () 확장 ( 이 경우에는 하나의 장르만 앨범에 필요 하기 때문입니다.You can use the .Single() extension in LINQ because in this case only one genre is expected for an album. Single () 메서드는 람다 식을 매개 변수로 사용 합니다 .이 경우에는 이름이 정의 된 값과 일치 하도록 단일 장르 개체를 지정 합니다.The Single() method takes a Lambda expression as a parameter, which in this case specifies a single Genre object such that its name matches the value defined.

장르 개체가 검색 될 때 로드 하려는 다른 관련 엔터티를 나타낼 수 있도록 하는 기능을 활용 합니다.You will take advantage of a feature that allows you to indicate other related entities you want loaded as well when the Genre object is retrieved. 이 기능을 쿼리 결과 셰이핑이라고 하며,이를 통해 데이터베이스에 액세스 하 여 정보를 검색 하는 데 필요한 횟수를 줄일 수 있습니다.This feature is called Query Result Shaping, and enables you to reduce the number of times needed to access the database to retrieve information. 이 시나리오에서는 검색 하는 장르에 대 한 앨범을 미리 인출 해야 합니다.In this scenario, you will want to pre-fetch the Albums for the Genre you retrieve.

이 쿼리에는 관련 앨범이 필요 함을 나타내는 장르 ("앨범") 가 포함 되어 있습니다.The query includes Genres.Include("Albums") to indicate that you want related albums as well. 이렇게 하면 단일 데이터베이스 요청에서 장르 및 앨범 데이터를 모두 검색 하므로 더 효율적인 응용 프로그램이 생성 됩니다.This will result in a more efficient application, since it will retrieve both Genre and Album data in a single database request.

작업 2-응용 프로그램 실행Task 2 - Running the Application

이 태스크에서는 응용 프로그램을 실행 하 고 데이터베이스에서 특정 장르의 앨범을 검색 합니다.In this task, you will run the application and retrieve albums of a specific genre from the database.

  1. F5 키를 눌러 응용 프로그램을 실행 합니다.Press F5 to run the Application.

  2. 프로젝트가 홈 페이지에서 시작 됩니다.The project starts in the Home page. URL을/Svs\uhhhhhhhhhhhhhi로 변경 하 여 데이터베이스에서 결과가 검색 되는지 확인 합니다.Change the URL to /Store/Browse?genre=Pop to verify that the results are being retrieved from the database.

    장르로 찾아보기Browsing by genre

    탐색/창/찾아보기? 장르 = PopBrowsing /Store/Browse?genre=Pop

작업 3-Id로 앨범 액세스Task 3 - Accessing Albums by Id

이 작업에서는 이전 절차를 반복 하 여 해당 Id로 앨범을 가져옵니다.In this task, you will repeat the previous procedure to get albums by their Id.

  1. 필요한 경우 브라우저를 닫고 Visual Studio로 돌아갑니다.Close the browser if needed, to return to Visual Studio. StoreController 클래스를 열어 Details 작업 메서드를 변경 합니다.Open the StoreController class to change the Details action method. 이렇게 하려면 솔루션 탐색기에서 Controllers 폴더를 확장 하 고 StoreController.cs를 두 번 클릭 합니다.To do this, in the Solution Explorer, expand the Controllers folder and double-click StoreController.cs.

  2. 세부 정보 작업 메서드를 변경 하 여 해당 Id를 기반으로 하는 앨범 세부 정보를 검색 합니다. 이렇게 하려면 다음 코드를 바꿉니다.Change the Details action method to retrieve albums details based on their Id. To do this, replace the following code:

    (코드 조각- 모델 및 데이터 액세스-Ex3 StoreController DetailsMethod)(Code Snippet - Models And Data Access - Ex3 StoreController DetailsMethod)

    // GET: /Store/
    public ActionResult Details(int id)
    {
        var album = this.storeDB.Albums.Find(id);
    
        if (album == null)
        {
            return this.HttpNotFound();
        }
    
        return this.View(album);
    }
    

작업 4-응용 프로그램 실행Task 4 - Running the Application

이 작업에서는 웹 브라우저에서 응용 프로그램을 실행 하 고 Id를 기준으로 앨범 세부 정보를 가져옵니다.In this task, you will run the Application in a web browser and obtain album details by their Id.

  1. F5 키를 눌러 응용 프로그램을 실행 합니다.Press F5 to run the Application.

  2. 프로젝트가 홈 페이지에서 시작 됩니다.The project starts in the Home page. URL을 /Store/Details/51 로 변경 하거나 장르를 검색 하 고 앨범을 선택 하 여 데이터베이스에서 결과가 검색 되는지 확인 합니다.Change the URL to /Store/Details/51 or browse the genres and select an album to verify that the results are being retrieved from the database.

    검색 세부 정보Browsing Details

    /Store/Details/51 찾아보기Browsing /Store/Details/51

Note

또한 부록 B: 웹 배포을 사용 하 여 ASP.NET MVC 4 응용 프로그램 게시를 수행 하는 Windows Azure 웹 사이트에이 응용 프로그램을 배포할 수 있습니다.Additionally, you can deploy this application to Windows Azure Web Sites following Appendix B: Publishing an ASP.NET MVC 4 Application using Web Deploy.


요약Summary

이 실습 실습을 완료 하면 Database First 방법과 Code First 방법을 사용 하 여 ASP.NET MVC 모델 및 데이터 액세스의 기본 사항을 배웠습니다.By completing this Hands-on Lab you have learned the fundamentals of ASP.NET MVC Models and Data Access, using the Database First approach as well as the Code First Approach:

  • 데이터를 사용 하기 위해 솔루션에 데이터베이스를 추가 하는 방법How to add a database to the solution in order to consume its data
  • 하드 코드 된 데이터 대신 데이터베이스에서 가져온 데이터를 사용 하 여 뷰 템플릿을 제공 하도록 컨트롤러를 업데이트 하는 방법How to update Controllers to provide View templates with the data taken from the database instead of hard-coded one
  • 매개 변수를 사용 하 여 데이터베이스를 쿼리 하는 방법How to query the database using parameters
  • 데이터베이스 액세스의 수를 줄이고 보다 효율적인 방식으로 데이터를 검색 하는 기능인 쿼리 결과 셰이핑을 사용 하는 방법How to use the Query Result Shaping, a feature that reduces the number of database accesses, retrieving data in a more efficient way
  • Microsoft Entity Framework에서 Database First 및 Code First 접근 방법을 사용 하 여 데이터베이스를 모델과 연결 하는 방법How to use both Database First and Code First approaches in Microsoft Entity Framework to link the database with the model

부록 A: 웹에 대 한 Visual Studio Express 2012 설치Appendix A: Installing Visual Studio Express 2012 for Web

Microsoft 웹 플랫폼 설치 관리자 를 사용 하 여 웹 또는 다른 "Express" 버전 에 대해 Microsoft Visual Studio Express 2012 를 설치할 수 있습니다.You can install Microsoft Visual Studio Express 2012 for Web or another "Express" version using the Microsoft Web Platform Installer. 다음 지침에서는 Microsoft 웹 플랫폼 설치 관리자를 사용 하 여 Visual studio Express 2012 for Web 을 설치 하는 데 필요한 단계를 안내 합니다.The following instructions guide you through the steps required to install Visual studio Express 2012 for Web using Microsoft Web Platform Installer.

  1. [https://go.microsoft.com/?linkid=9810169](https://go.microsoft.com/?linkid=9810169)로 이동 합니다.Go to [https://go.microsoft.com/?linkid=9810169](https://go.microsoft.com/?linkid=9810169). 또는 웹 플랫폼 설치 관리자를 이미 설치한 경우에는 웹 플랫폼 설치 관리자를 열고 Microsoft AZURE SDK"를 사용 하 여 웹 용 2012 Visual Studio Express "제품을 검색할 수 있습니다.Alternatively, if you already have installed Web Platform Installer, you can open it and search for the product "Visual Studio Express 2012 for Web with Windows Azure SDK".

  2. 지금 설치를 클릭 합니다.Click on Install Now. 웹 플랫폼 설치 관리자 가 없으면 먼저이를 다운로드 하 여 설치 하도록 리디렉션됩니다.If you do not have Web Platform Installer you will be redirected to download and install it first.

  3. 웹 플랫폼 설치 관리자 가 열리면 설치 를 클릭 하 여 설치를 시작 합니다.Once Web Platform Installer is open, click Install to start the setup.

    Visual Studio Express 설치Install Visual Studio Express

    Visual Studio Express 설치Install Visual Studio Express

  4. 모든 제품의 라이선스 및 사용 조건을 읽고 동의 함을 클릭 하 여 계속 합니다.Read all the products' licenses and terms and click I Accept to continue.

    사용 조건 동의

    사용 조건 동의Accepting the license terms

  5. 다운로드 및 설치 프로세스가 완료 될 때까지 기다립니다.Wait until the downloading and installation process completes.

    설치 진행률

    설치 진행률Installation progress

  6. 설치가 완료 되 면 마침을 클릭 합니다.When the installation completes, click Finish.

    설치 완료

    설치 완료Installation completed

  7. 끝내기 를 클릭 하 여 웹 플랫폼 설치 관리자를 닫습니다.Click Exit to close Web Platform Installer.

  8. 웹에 대 한 Visual Studio Express를 열려면 시작 화면으로 이동 하 "VS Express"작성을 시작한 후 VS Express for Web 타일을 클릭 합니다.To open Visual Studio Express for Web, go to the Start screen and start writing "VS Express", then click on the VS Express for Web tile.

    VS Express for Web 타일

    VS Express for Web 타일VS Express for Web tile

부록 B: 웹 배포을 사용 하 여 ASP.NET MVC 4 응용 프로그램 게시Appendix B: Publishing an ASP.NET MVC 4 Application using Web Deploy

이 부록에서는 windows azure 관리 포털에서 새 웹 사이트를 만들고 랩에 따라 가져온 응용 프로그램을 게시 하 여 Windows Azure에서 제공 하는 웹 배포 게시 기능을 활용 하는 방법을 보여 줍니다.This appendix will show you how to create a new web site from the Windows Azure Management Portal and publish the application you obtained by following the lab, taking advantage of the Web Deploy publishing feature provided by Windows Azure.

작업 1-Windows Azure 포털에서 새 웹 사이트 만들기Task 1 - Creating a New Web Site from the Windows Azure Portal

  1. Windows Azure 관리 포털 로 이동 하 고 구독과 연결 된 Microsoft 자격 증명을 사용 하 여 로그인 합니다.Go to the Windows Azure Management Portal and sign in using the Microsoft credentials associated with your subscription.

    Note

    Windows Azure를 사용 하면 10 개의 ASP.NET 웹 사이트를 무료로 호스팅한 후 트래픽 증가에 따라 크기를 조정할 수 있습니다.With Windows Azure you can host 10 ASP.NET Web Sites for free and then scale as your traffic grows. 여기에서 등록할 수 있습니다.You can sign up here.

    Windows Azure Portal에 로그온 합니다.Log on to Windows Azure portal

    Windows Azure 관리 포털에 로그온 합니다.Log on to Windows Azure Management Portal

  2. 명령 모음에서 새로 만들기 를 클릭 합니다.Click New on the command bar.

    새 웹 사이트 만들기Creating a new Web Site

    새 웹 사이트 만들기Creating a new Web Site

  3. Compute | 웹 사이트를 클릭 합니다.Click Compute | Web Site. 그런 다음 빠른 생성 옵션을 선택 합니다.Then select Quick Create option. 새 웹 사이트에 사용할 수 있는 URL을 제공 하 고 웹 사이트 만들기를 클릭 합니다.Provide an available URL for the new web site and click Create Web Site.

    Note

    Microsoft Azure 웹 사이트는 사용자가 제어 하 고 관리할 수 있는 클라우드에서 실행 되는 웹 응용 프로그램에 대 한 호스트입니다.A Windows Azure Web Site is the host for a web application running in the cloud that you can control and manage. 빠른 생성 옵션을 사용 하면 포털 외부에서 Windows Azure 웹 사이트에 완료 된 웹 응용 프로그램을 배포할 수 있습니다.The Quick Create option allows you to deploy a completed web application to the Windows Azure Web Site from outside the portal. 데이터베이스를 설정 하는 단계는 포함 되지 않습니다.It does not include steps for setting up a database.

    빠른 생성을 사용 하 여 새 웹 사이트 만들기Creating a new Web Site using Quick Create

    빠른 생성을 사용 하 여 새 웹 사이트 만들기Creating a new Web Site using Quick Create

  4. 웹 사이트가 만들어질 때까지 기다립니다.Wait until the new Web Site is created.

  5. 웹 사이트를 만든 후 URL 열 아래의 링크를 클릭 합니다.Once the Web Site is created click the link under the URL column. 새 웹 사이트가 작동 하는지 확인 합니다.Check that the new Web Site is working.

    새 웹 사이트로 이동Browsing to the new web site

    새 웹 사이트로 이동Browsing to the new web site

    웹 사이트 실행 중Web site running

    웹 사이트 실행 중Web site running

  6. 포털로 돌아가서 이름 열 아래에 있는 웹 사이트의 이름을 클릭 하 여 관리 페이지를 표시 합니다.Go back to the portal and click the name of the web site under the Name column to display the management pages.

    웹 사이트 관리 페이지 열기Opening the web site management pages

    웹 사이트 관리 페이지 열기Opening the Web Site management pages

  7. 대시보드 페이지의 빠른 보기 섹션에서 게시 프로필 다운로드 링크를 클릭 합니다.In the Dashboard page, under the quick glance section, click the Download publish profile link.

    Note

    게시 프로필 에는 사용 하도록 설정 된 각 게시 방법에 대해 웹 응용 프로그램을 Windows Azure 웹 사이트에 게시 하는 데 필요한 모든 정보가 포함 되어 있습니다.The publish profile contains all of the information required to publish a web application to a Windows Azure website for each enabled publication method. 게시 프로필에는 게시 방법이 사용 설정된 각 엔드포인트에 연결하고 이에 대해 인증하는 데 필요한 URL, 사용자 자격 증명 및 데이터베이스 문자열이 포함되어 있습니다.The publish profile contains the URLs, user credentials and database strings required to connect to and authenticate against each of the endpoints for which a publication method is enabled. Microsoft WebMatrix 2, Microsoft Visual Studio Express for WebMicrosoft Visual Studio 2012 는 게시 프로필 읽기를 지원 하 여 웹 응용 프로그램을 Windows Azure 웹 사이트에 게시 하기 위해 이러한 프로그램의 구성을 자동화 합니다.Microsoft WebMatrix 2, Microsoft Visual Studio Express for Web and Microsoft Visual Studio 2012 support reading publish profiles to automate configuration of these programs for publishing web applications to Windows Azure websites.

    웹 사이트 게시 프로필을 다운로드 하는 중Downloading the web site publish profile

    웹 사이트 게시 프로필을 다운로드 하는 중Downloading the Web Site publish profile

  8. 알려진 위치에 게시 프로필 파일을 다운로드 합니다.Download the publish profile file to a known location. 이 연습을 통해이 파일을 사용 하 여 Visual Studio에서 Windows Azure 웹 사이트에 웹 응용 프로그램을 게시 하는 방법을 확인할 수 있습니다.Further in this exercise you will see how to use this file to publish a web application to a Windows Azure Web Sites from Visual Studio.

    게시 프로필 파일을 저장 하는 중Saving the publish profile file

    게시 프로필 파일을 저장 하는 중Saving the publish profile file

작업 2-데이터베이스 서버 구성Task 2 - Configuring the Database Server

응용 프로그램에서 SQL Server 데이터베이스를 사용 하는 경우 SQL Database 서버를 만들어야 합니다.If your application makes use of SQL Server databases you will need to create a SQL Database server. SQL Server 사용 하지 않는 간단한 응용 프로그램을 배포 하려는 경우이 작업을 건너뛸 수 있습니다.If you want to deploy a simple application that does not use SQL Server you might skip this task.

  1. 응용 프로그램 데이터베이스를 저장 하기 위한 SQL Database 서버가 필요 합니다.You will need a SQL Database server for storing the application database. Microsoft Azure 관리 포털의 구독에서 SQL Database 서버를 볼 수는 SQL 데이터베이스 | 서버 | 서버의 대시보드.You can view the SQL Database servers from your subscription in the Windows Azure Management portal at Sql Databases | Servers | Server's Dashboard. 만든 서버가 없는 경우 명령 모음에서 추가 단추를 사용 하 여 만들 수 있습니다.If you do not have a server created, you can create one using the Add button on the command bar. 다음 작업에서 사용할 서버 이름과 URL, 관리자 로그인 이름 및 암호를 기록해 둡니다.Take note of the server name and URL, administrator login name and password, as you will use them in the next tasks. 이후 단계에서 생성 되므로 아직 데이터베이스를 만들지 마십시오.Do not create the database yet, as it will be created in a later stage.

    SQL Database 서버 대시보드SQL Database Server Dashboard

    SQL Database 서버 대시보드SQL Database Server Dashboard

  2. 다음 작업에서는 Visual Studio에서 데이터베이스 연결을 테스트 합니다. 따라서 서버에서 허용 되는 Ip 주소목록에 로컬 IP 주소를 포함 해야 합니다.In the next task you will test the database connection from Visual Studio, for that reason you need to include your local IP address in the server's list of Allowed IP Addresses. 이렇게 하려면 구성을 클릭 하 고, 현재 클라이언트 IP 주소 에서 ip 주소를 선택 하 고, 시작 Ip 주소끝 ip 주소 텍스트 상자에 붙여 넣고, 추가-클라이언트-ip 주소-확인 단추 단추를 클릭 합니다.To do that, click Configure, select the IP address from Current Client IP Address and paste it on the Start IP Address and End IP Address text boxes and click the add-client-ip-address-ok-button button.

    클라이언트 IP 주소를 추가 하는 중

    클라이언트 IP 주소를 추가 하는 중Adding Client IP Address

  3. 클라이언트 Ip 주소가 허용 된 ip 주소 목록에 추가 되 면 저장 을 클릭 하 여 변경 내용을 확인 합니다.Once the Client IP Address is added to the allowed IP addresses list, click on Save to confirm the changes.

    변경 내용 확인

    변경 내용 확인Confirm Changes

작업 3-웹 배포를 사용 하 여 ASP.NET MVC 4 응용 프로그램 게시Task 3 - Publishing an ASP.NET MVC 4 Application using Web Deploy

  1. ASP.NET MVC 4 솔루션으로 돌아갑니다.Go back to the ASP.NET MVC 4 solution. 솔루션 탐색기에서 웹 사이트 프로젝트를 마우스 오른쪽 단추로 클릭 하 고 게시를 선택 합니다.In the Solution Explorer, right-click the web site project and select Publish.

    응용 프로그램 게시Publishing the Application

    웹 사이트 게시Publishing the web site

  2. 첫 번째 작업에서 저장 한 게시 프로필을 가져옵니다.Import the publish profile you saved in the first task.

    게시 프로필을 가져오는 중Importing the publish profile

    게시 프로필을 가져오는 중Importing publish profile

  3. 연결 유효성 검사를 클릭 합니다.Click Validate Connection. 유효성 검사가 완료 되 면 다음을 클릭 합니다.Once Validation is complete click Next.

    Note

    유효성 검사는 연결 유효성 검사 단추 옆에 녹색 확인 표시가 표시 되 면 완료 됩니다.Validation is complete once you see a green checkmark appear next to the Validate Connection button.

    연결 유효성 검사Validating connection

    연결 유효성 검사Validating connection

  4. 설정 페이지의 데이터베이스 섹션에서 데이터베이스 연결의 텍스트 상자 옆에 있는 단추 (즉, defaultconnection)를 클릭 합니다.In the Settings page, under the Databases section, click the button next to your database connection's textbox (i.e. DefaultConnection).

    웹 배포 구성Web deploy configuration

    웹 배포 구성Web deploy configuration

  5. 데이터베이스 연결을 다음과 같이 구성 합니다.Configure the database connection as follows:

    • 서버 이름tcp: 접두사를 사용 하 여 SQL Database 서버 URL을 입력 합니다.In the Server name type your SQL Database server URL using the tcp: prefix.

    • 사용자 이름 에 서버 관리자 로그인 이름을 입력 합니다.In User name type your server administrator login name.

    • 암호 에 서버 관리자 로그인 암호를 입력 합니다.In Password type your server administrator login password.

    • 새 데이터베이스 이름을 입력 합니다.Type a new database name.

      대상 연결 문자열 구성Configuring destination connection string

      대상 연결 문자열 구성Configuring destination connection string

  6. 그런 후 OK를 클릭합니다.Then click OK. 데이터베이스를 만들 것인지 묻는 메시지가 표시 되 면 를 클릭 합니다.When prompted to create the database click Yes.

    데이터베이스 만들기Creating the database

    데이터베이스 만들기Creating the database

  7. Windows Azure에서 SQL Database에 연결 하는 데 사용할 연결 문자열은 기본 연결 텍스트 상자 내에 표시 됩니다.The connection string you will use to connect to SQL Database in Windows Azure is shown within Default Connection textbox. 그런 후 Next 를 클릭합니다.Then click Next.

    SQL Database를 가리키는 연결 문자열Connection string pointing to SQL Database

    SQL Database를 가리키는 연결 문자열Connection string pointing to SQL Database

  8. 미리 보기 페이지에서 게시를 클릭 합니다.In the Preview page, click Publish.

    웹 응용 프로그램 게시Publishing the web application

    웹 응용 프로그램 게시Publishing the web application

  9. 게시 프로세스가 완료 되 면 기본 브라우저가 게시 된 웹 사이트를 엽니다.Once the publishing process finishes, your default browser will open the published web site.

부록 C: 코드 조각 사용Appendix C: Using Code Snippets

코드 조각을 사용 하면 필요한 모든 코드를 편리 하 게 사용할 수 있습니다.With code snippets, you have all the code you need at your fingertips. 랩 문서는 다음 그림에 표시 된 것 처럼 사용자가 사용할 수 있는 경우를 정확 하 게 알려줍니다.The lab document will tell you exactly when you can use them, as shown in the following figure.

Visual Studio 코드 조각을 사용 하 여 프로젝트에 코드 삽입Using Visual Studio code snippets to insert code into your project

Visual Studio 코드 조각을 사용 하 여 프로젝트에 코드 삽입Using Visual Studio code snippets to insert code into your project

키보드를 사용 하 여 코드 조각을 추가 하려면C# (만 해당)To add a code snippet using the keyboard (C# only)

  1. 코드를 삽입할 위치에 커서를 놓습니다.Place the cursor where you would like to insert the code.
  2. 조각 이름 (공백 또는 하이픈 제외)을 입력 하기 시작 합니다.Start typing the snippet name (without spaces or hyphens).
  3. IntelliSense는 일치 하는 코드 조각의 이름을 표시 합니다.Watch as IntelliSense displays matching snippets' names.
  4. 올바른 코드 조각을 선택 하거나 전체 코드 조각 이름이 선택 될 때까지 계속 입력 합니다.Select the correct snippet (or keep typing until the entire snippet's name is selected).
  5. Tab 키를 두 번 눌러 커서 위치에 코드 조각을 삽입 합니다.Press the Tab key twice to insert the snippet at the cursor location.

코드 조각 이름 입력 시작Start typing the snippet name

코드 조각 이름 입력 시작Start typing the snippet name

Tab 키를 눌러 강조 표시 된 코드 조각을 선택 합니다.Press Tab to select the highlighted snippet

Tab 키를 눌러 강조 표시 된 코드 조각을 선택 합니다.Press Tab to select the highlighted snippet

Tab 키를 다시 누르면 코드 조각이 확장 됩니다.Press Tab again and the snippet will expand

Tab 키를 다시 누르면 코드 조각이 확장 됩니다.Press Tab again and the snippet will expand

마우스C#(, Visual Basic 및 XML)를 사용 하 여 코드 조각을 추가 하려면 1(sp1).To add a code snippet using the mouse (C#, Visual Basic and XML) 1. 코드 조각을 삽입 하려는 위치를 마우스 오른쪽 단추로 클릭 합니다.Right-click where you want to insert the code snippet.

  1. 코드 조각 삽입 을 선택한 다음 내 코드 조각을선택 합니다.Select Insert Snippet followed by My Code Snippets.
  2. 목록에서 관련 코드 조각을 클릭 하 여 선택 합니다.Pick the relevant snippet from the list, by clicking on it.

코드 조각을 삽입할 위치를 마우스 오른쪽 단추로 클릭 하 고 코드 조각 삽입을 선택 합니다.Right-click where you want to insert the code snippet and select Insert Snippet

코드 조각을 삽입할 위치를 마우스 오른쪽 단추로 클릭 하 고 코드 조각 삽입을 선택 합니다.Right-click where you want to insert the code snippet and select Insert Snippet

목록에서 관련 코드 조각을 클릭 하 여 선택 합니다.Pick the relevant snippet from the list, by clicking on it

목록에서 관련 코드 조각을 클릭 하 여 선택 합니다.Pick the relevant snippet from the list, by clicking on it