Entity Framework 4.0 Database First 및 ASP.NET 4 Web Forms 시작

작성자: Tom Dykstra

Contoso University 샘플 웹 애플리케이션은 Entity Framework 4.0 및 Visual Studio 2010을 사용하여 ASP.NET Web Forms 애플리케이션을 만드는 방법을 보여 줍니다. 샘플 애플리케이션은 가상의 Contoso University용 웹 사이트입니다. 학생 입학, 강좌 개설 및 강사 할당과 같은 기능이 있습니다.

이 자습서에서는 C#의 예제를 보여 줍니다. 다운로드 가능한 샘플에는 C# 및 Visual Basic의 코드가 모두 포함되어 있습니다.

데이터베이스 우선

Entity Framework에서 데이터로 작업할 수 있는 세 가지 방법은 Database First, Model FirstCode First입니다. 이 자습서는 Database First용입니다. 이러한 워크플로 간의 차이점과 시나리오에 가장 적합한 워크플로를 선택하는 방법에 대한 지침은 Entity Framework 개발 워크플로를 참조하세요.

Web Forms

이 자습서 시리즈에서는 ASP.NET Web Forms 모델을 사용하며 Visual Studio에서 ASP.NET Web Forms 사용하는 방법을 알고 있다고 가정합니다. 그렇지 않으면 ASP.NET 4.5 Web Forms 시작 참조하세요. ASP.NET MVC 프레임워크를 사용하려면 ASP.NET MVC를 사용하여 Entity Framework로 시작 참조하세요.

소프트웨어 버전

자습서에 표시 또한 와 함께 작동합니다.
Windows 7 Windows 8
Visual Studio 2010 Visual Studio 2010 Express for Web. 자습서는 이후 버전의 Visual Studio에서 테스트되지 않았습니다. 메뉴 선택, 대화 상자 및 템플릿에는 여러 가지 차이점이 있습니다.
.NET 4 .NET 4.5는 .NET 4와 이전 버전과 호환되지만 자습서는 .NET 4.5로 테스트되지 않았습니다.
Entity Framework 4 자습서는 이후 버전의 Entity Framework에서 테스트되지 않았습니다. Entity Framework 5부터 EF는 기본적으로 DbContext API EF 4.1에서 도입된 를 사용합니다. EntityDataSource 컨트롤은 API를 ObjectContext 사용하도록 설계되었습니다. API에서 EntityDataSource 컨트롤 DbContext 을 사용하는 방법에 대한 자세한 내용은 이 블로그 게시물을 참조하세요.

질문

자습서와 직접 관련이 없는 질문이 있는 경우 ASP.NET Entity Framework 포럼, Entity Framework및 LINQ to Entities 포럼 또는 StackOverflow.com 게시할 수 있습니다.

개요

이 자습서에서 빌드할 애플리케이션은 간단한 대학 웹 사이트입니다.

홈, 정보, 학생, 과정, 강사 및 부서 페이지에 대한 링크를 보여 주는 Contoso University 홈페이지의 스크린샷.

사용자는 학생, 강좌 및 강사 정보를 보고 업데이트할 수 있습니다. 만들 화면 중 몇 가지는 다음과 같습니다.

Image30

Image37

Image31

Image32

웹 애플리케이션 만들기

자습서를 시작하려면 Visual Studio를 열고 ASP.NET 웹 애플리케이션 템플릿을 사용하여 새 ASP.NET 웹 애플리케이션 프로젝트를 만듭니다.

Image01

이 템플릿은 스타일시트와 master 페이지를 이미 포함하는 웹 애플리케이션 프로젝트를 만듭니다.

Image02

Site.Master 파일을 열고 "내 ASP.NET 응용 프로그램"을 "Contoso University"로 변경합니다.

<h1>
    Contoso University
</h1>

명명 NavigationMenu메뉴 컨트롤을 찾아서 만들 페이지의 메뉴 항목을 추가하는 다음 태그로 바꿉다.

<asp:Menu ID="NavigationMenu" runat="server" CssClass="menu" EnableViewState="false"
                    IncludeStyleBlock="false" Orientation="Horizontal">
                    <Items>
                        <asp:MenuItem NavigateUrl="~/Default.aspx" Text="Home" />
                        <asp:MenuItem NavigateUrl="~/About.aspx" Text="About" />
                        <asp:MenuItem NavigateUrl="~/Students.aspx" Text="Students">
                            <asp:MenuItem NavigateUrl="~/StudentsAdd.aspx" Text="Add Students" />
                        </asp:MenuItem>
                        <asp:MenuItem NavigateUrl="~/Courses.aspx" Text="Courses">
                            <asp:MenuItem NavigateUrl="~/CoursesAdd.aspx" Text="Add Courses" />
                        </asp:MenuItem>
                        <asp:MenuItem NavigateUrl="~/Instructors.aspx" Text="Instructors">
                            <asp:MenuItem NavigateUrl="~/InstructorsCourses.aspx" Text="Course Assignments" />
                            <asp:MenuItem NavigateUrl="~/OfficeAssignments.aspx" Text="Office Assignments" />
                        </asp:MenuItem>
                        <asp:MenuItem NavigateUrl="~/Departments.aspx" Text="Departments">
                            <asp:MenuItem NavigateUrl="~/DepartmentsAdd.aspx" Text="Add Departments" />
                        </asp:MenuItem>
                    </Items>
                </asp:Menu>

Default.aspx 페이지를 열고 라는 BodyContent 컨트롤을 Content 다음과 같이 변경합니다.

<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
    <h2>
        Welcome to Contoso University!
   </h2>
</asp:Content>

이제 만들려는 다양한 페이지에 대한 링크가 있는 간단한 홈페이지가 있습니다.

홈, 정보, 학생, 과정, 강사 및 부서 페이지에 대한 링크를 보여주는 Contoso University 홈페이지의 스크린샷

데이터베이스 만들기

이러한 자습서에서는 Entity Framework 데이터 모델 디자이너를 사용하여 기존 데이터베이스(종종 데이터베이스 우선 접근 방식이라고도 함)를 기반으로 데이터 모델을 자동으로 만듭니다. 이 자습서 시리즈에서 다루지 않는 대안은 데이터 모델을 수동으로 만든 다음 디자이너가 데이터베이스를 만드는 스크립트를 생성하도록 하는 것입니다( 모델 우선 방법).

이 자습서에서 사용되는 데이터베이스 우선 메서드의 경우 다음 단계는 사이트에 데이터베이스를 추가하는 것입니다. 가장 쉬운 방법은 먼저 이 자습서와 함께 진행되는 프로젝트를 다운로드하는 것입니다. 그런 다음 App_Data 폴더를 마우스 오른쪽 단추로 클릭하고 기존 항목 추가를 선택한 다음 다운로드한 프로젝트에서 School.mdf 데이터베이스 파일을 선택합니다.

대안은 학교 샘플 데이터베이스 만들기의 지침을 따르는 것입니다. 데이터베이스를 다운로드하든 만들든 다음 폴더의 School.mdf 파일을 애플리케이션의 App_Data 폴더로 복사합니다.

%PROGRAMFILES%\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA

(.mdf 파일의 이 위치는 SQL Server 2008 Express를 사용하고 있다고 가정합니다.)

스크립트에서 데이터베이스를 만드는 경우 다음 단계를 수행하여 데이터베이스 다이어그램을 만듭니다.

  1. 서버 Explorer데이터 연결을 확장하고 School.mdf를 확장하고 데이터베이스 다이어그램을 마우스 오른쪽 단추로 클릭한 다음 새 다이어그램 추가를 선택합니다.

    Image35

  2. 모든 테이블을 선택한 다음 추가를 클릭합니다.

    Image36

    SQL Server 테이블, 테이블의 열 및 테이블 간의 관계를 보여 주는 데이터베이스 다이어그램을 만듭니다. 원하는 경우 테이블을 이동하여 구성할 수 있습니다.

  3. 다이어그램을 "SchoolDiagram"으로 저장하고 닫습니다.

이 자습서와 함께 제공되는 School.mdf 파일을 다운로드하는 경우 서버 Explorer 데이터베이스 다이어그램에서 SchoolDiagram을 두 번 클릭하여 데이터베이스 다이어그램을 볼 수 있습니다.

Image38

다이어그램은 다음과 같습니다(테이블은 여기에 표시된 것과 다른 위치에 있을 수 있음).

Image04

Entity Framework 데이터 모델 만들기

이제 이 데이터베이스에서 Entity Framework 데이터 모델을 만들 수 있습니다. 애플리케이션의 루트 폴더에 데이터 모델을 만들 수 있지만 이 자습서에서는 DAL (데이터 액세스 계층용)이라는 폴더에 배치합니다.

솔루션 탐색기DAL이라는 프로젝트 폴더를 추가합니다(솔루션이 아닌 프로젝트 아래에 있는지 확인).

DAL 폴더를 마우스 오른쪽 단추로 클릭한 다음 추가새 항목을 선택합니다. 설치된 템플릿에서 데이터를 선택하고 ADO.NET 엔터티 데이터 모델 템플릿을 선택하고 이름을 SchoolModel.edmx로 지정한 다음 추가를 클릭합니다.

Image05

그러면 엔터티 데이터 모델 마법사가 시작됩니다. 첫 번째 마법사 단계에서 는 데이터베이스에서 생성 옵션이 기본적으로 선택됩니다. 다음을 클릭합니다.

Image06

데이터 연결 선택 단계에서 기본값을 그대로 두고 다음을 클릭합니다. School 데이터베이스는 기본적으로 선택되며 연결 설정은 Web.config 파일에 SchoolEntities로 저장됩니다.

Image07

데이터베이스 개체 선택 마법사 단계에서 앞에서 생성한 다이어그램에 대해 만든 테이블을 제외한 sysdiagrams 모든 테이블을 선택한 다음 마침을 클릭합니다.

Image08

모델 만들기가 완료되면 Visual Studio는 데이터베이스 테이블에 해당하는 Entity Framework 개체(엔터티)의 그래픽 표현을 보여 줍니다. (데이터베이스 다이어그램과 마찬가지로 개별 요소의 위치는 이 그림에 표시된 위치와 다를 수 있습니다. 원하는 경우 요소를 끌어 그림과 일치시킬 수 있습니다.)

Image09

Entity Framework 데이터 모델 탐색

엔터티 다이어그램은 데이터베이스 다이어그램과 매우 유사하며 몇 가지 차이점이 있습니다. 한 가지 차이점은 연결 유형을 나타내는 각 연결의 끝에 기호를 추가하는 것입니다(테이블 관계는 데이터 모델에서 엔터티 연결이라고 함).

  • 일대일 연결은 "1" 및 "0..1"로 표시됩니다.

    Image39

    이 경우 Person 엔터티는 엔터티와 OfficeAssignment 연결되거나 연결되지 않을 수 있습니다. OfficeAssignment 엔터티는 엔터티와 Person 연결되어야 합니다. 즉, 강사는 사무실에 할당되거나 할당되지 않을 수 있으며, 모든 사무실은 한 명의 강사에게만 할당될 수 있습니다.

  • 일대다 연결은 "1" 및 "*"로 표시됩니다.

    Image40

    이 경우 엔터티에 Person 연결된 StudentGrade 엔터티가 있거나 없을 수 있습니다. StudentGrade 엔터티는 하나의 Person 엔터티와 연결되어야 합니다. StudentGrade 엔터티는 실제로 이 데이터베이스에 등록된 과정을 나타냅니다. 학생이 과정에 등록되어 있고 아직 성적이 없으면 속성은 Grade null입니다. 즉, 학생은 아직 과정에 등록되지 않았거나, 한 과정에 등록되거나, 여러 과정에 등록될 수 있습니다. 등록된 과정의 각 성적은 한 명의 학생에게만 적용됩니다.

  • 다 대 다 연결은 "*" 및 "*"로 표시됩니다.

    Image41

    이 경우 엔터티에 Person 연결된 Course 엔터티가 있거나 없을 수 있으며 그 반대의 경우도 마찬가지 Course 입니다. 엔터티에 연결된 Person 엔터티가 있을 수도 있고 없을 수도 있습니다. 즉, 강사는 여러 과정을 가르칠 수 있으며 여러 강사가 과정을 가르칠 수 있습니다. (이 데이터베이스에서 이 관계는 강사에게만 적용되며 학생을 과정에 연결하지 않습니다. 학생은 StudentGrades 테이블에 의해 과정에 연결됩니다.)

데이터베이스 다이어그램과 데이터 모델 간의 또 다른 차이점은 각 엔터티에 대한 추가 탐색 속성 섹션입니다. 엔터티의 탐색 속성은 관련 엔터티를 참조합니다. 예를 들어 엔터티의 Courses 속성 Person 에는 해당 엔터티와 관련된 모든 Course 엔터티의 컬렉션이 Person 포함됩니다.

Image12

그러나 데이터베이스와 데이터 모델 간의 또 다른 차이점은 데이터베이스에서 다대다 관계의 및 Course 테이블을 연결하는 Person 데 사용되는 연결 테이블이 없다는 CourseInstructor 것입니다. 탐색 속성을 사용하면 엔터티에서 Person 관련 Course 엔터티 및 관련 Person 엔터티를 Course 가져올 수 있으므로 데이터 모델의 연결 테이블을 나타낼 필요가 없습니다.

Image11

이 자습서에서는 테이블의 열에 FirstNamePerson 실제로 사람의 이름과 중간 이름이 모두 포함되어 있다고 가정합니다. 이를 반영하도록 필드 이름을 변경하려고 하지만 DBA(데이터베이스 관리자)는 데이터베이스를 변경하지 않을 수 있습니다. 데이터 모델에서 속성의 FirstName 이름을 변경할 수 있지만 해당 데이터베이스는 변경되지 않은 상태로 유지할 수 있습니다.

디자이너에서 엔터티에서 FirstName 을 마우스 오른쪽 단추로 Person 클릭한 다음 이름 바꾸기를 선택합니다.

Image13

새 이름 "FirstMidName"을 입력합니다. 이렇게 하면 데이터베이스를 변경하지 않고 코드에서 열을 참조하는 방식이 변경됩니다.

Image29

모델 브라우저는 데이터베이스 구조, 데이터 모델 구조 및 이들 간의 매핑을 보는 또 다른 방법을 제공합니다. 이를 보려면 엔터티 디자이너에서 빈 영역을 마우스 오른쪽 단추로 클릭한 다음 모델 브라우저를 클릭합니다.

Image18

모델 브라우저 창에 트리 보기가 표시됩니다. (모델 브라우저 창은 솔루션 탐색기 창과 함께 도킹될 수 있습니다.) SchoolModel 노드는 데이터 모델 구조를 나타내고 SchoolModel.Store 노드는 데이터베이스 구조를 나타냅니다.

Image26

SchoolModel.Store 확장하여 테이블을 확인하고 테이블/뷰를 확장하여 테이블을 표시한 다음 과정을 확장하여 테이블 내의 열을 확인합니다.

Image19

SchoolModel을 확장하고 엔터티 형식을 확장한 다음 과정 노드를 확장하여 엔터티 내의 엔터티 및 속성을 확인합니다.

Image20

디자이너 또는 모델 브라우저 창에서 Entity Framework가 두 모델의 개체와 어떻게 관련되는지 확인할 수 있습니다. 엔터티를 마우스 오른쪽 단추로 Person 클릭하고 테이블 매핑을 선택합니다.

Image21

그러면 매핑 세부 정보 창이 열립니다. 이 창을 통해 데이터베이스 열 FirstName 이 에 매핑되는 것을 FirstMidName볼 수 있습니다. 이는 데이터 모델에서 이름을 로 변경한 것입니다.

Image22

Entity Framework는 XML을 사용하여 데이터베이스, 데이터 모델 및 이들 간의 매핑에 대한 정보를 저장합니다. SchoolModel.edmx 파일은 실제로 이 정보를 포함하는 XML 파일입니다. 디자이너는 그래픽 형식으로 정보를 렌더링하지만 솔루션 탐색기 .edmx 파일을 마우스 오른쪽 단추로 클릭하고 열기를 클릭한 다음 XML(텍스트) 편집기를 선택하여 파일을 XML로 볼 수도 있습니다. (데이터 모델 디자이너와 XML 편집기 는 동일한 파일을 열고 작업하는 두 가지 방법일 뿐이므로 디자이너를 열어 XML 편집기에서 동시에 파일을 열 수 없습니다.)

이제 웹 사이트, 데이터베이스 및 데이터 모델을 만들었습니다. 다음 연습에서는 데이터 모델 및 ASP.NET EntityDataSource 컨트롤을 사용하여 데이터 작업을 시작합니다.