Entity Framework - Model First 작성 샘플

https://msdn.microsoft.com/ko-kr/data/jj205424


이 비디오와 단계별 연습에서는 Entity Framework를 사용한 Model First 개발에 대해 소개합니다. Model First는 Entity Framework 디자이너를 사용하여 새 모델을 만든 다음 모델에서 데이터베이스 스키마를 생성할 수 있습니다. 모델은 EDMX 파일(.edmx 확장명)로 저장되며 Entity Framework 디자이너에서 확인하고 편집할 수 있습니다. EDMX 파일에서 응용 프로그램과 상호 작용할 클래스가 자동으로 생성됩니다.

추가 비디오 옵션 - 다운로드 포함)

 

필수 구성 요소

이 연습을 완료하려면 Visual Studio 2010 또는 Visual Studio 2012가 설치되어 있어야 합니다.

Visual Studio 2010을 사용하는 경우 NuGet도 설치해야 합니다.

 

1. 응용 프로그램 만들기

간단한 예제 프로그램으로 Model First를 사용하여 데이터 액세스를 수행하는 기본 콘솔 응용 프로그램을 빌드해 보겠습니다.

  • Visual Studio를 엽니다.
  • 파일 -> 새로 만들기 -> 프로젝트...
  • 왼쪽 메뉴에서 Windows를 선택하고 콘솔 응용 프로그램을 선택합니다.
  • 이름으로 ModelFirstSample을 입력합니다.
  • 확인을 선택합니다.

 

2. 모델 만들기

Visual Studio에 포함되어 있는 Entity Framework 디자이너를 사용하여 모델을 만들겠습니다.

  • 프로젝트 -> 새 항목 추가…
  • 왼쪽 메뉴에서 데이터 및 ADO.NET 엔터티 데이터 모델을 선택합니다.
  • 이름으로 BloggingModel을 입력한 다음 확인을 클릭하면 엔터티 데이터 모델 마법사가 시작됩니다.
  • 빈 모델을 선택하고 마침을 클릭합니다.
    빈 모델이 선택되어 있는 엔터티 데이터 모델 마법사

 

Entity Framework 디자이너가 실행되어 빈 모델을 표시합니다. 이제 모델에 엔터티와 속성, 연결을 추가할 수 있습니다.

  • 디자인 화면에서 마우스 오른쪽 단추를 클릭하고 속성을 선택합니다.
  • 속성 창에서 엔터티 컨테이너 이름을 BloggingContext로 변경합니다.
    생성될 파생 컨텍스트의 이름으로, 컨텍스트는 데이터를 쿼리하고 저장할 수 있는 데이터베이스의 세션을 나타냅니다.
  • 디자인 화면에서 마우스 오른쪽 단추를 클릭하고 새 항목 추가 -> 엔터티…를 선택합니다.
  • 엔터티 이름과 키 이름으로 각각 Blog 및 BlogId를 입력하고 확인을 클릭합니다.
    엔터티 이름과 키 속성 이름이 입력된 엔터티 추가 화면
  • 디자인 화면에서 새 엔터티를 마우스 오른쪽 단추로 클릭한 다음 새로 추가 -> 스칼라 속성을 선택하고 속성의 이름으로 Name을 입력합니다.
  • 이 과정을 반복하여 Url 속성도 추가합니다.
  • 디자인 화면의 Url 속성을 마우스 오른쪽 단추로 클릭한 다음 속성을 선택하고 속성 창에서 Null 허용 설정을 True로 변경합니다.
    그러면 Url을 지정하지 않고 데이터베이스에 Blog를 저장할 수 있습니다.
  • 같은 방법으로 PostId 키 속성을 가진 Post 엔터티도 추가합니다.
  • Post 엔터티에 Title 및 Content 스칼라 속성을 추가합니다.

 

이제 몇 가지 엔터티가 생성되었으므로 엔터티 간 연결(또는 관계)을 추가하겠습니다.

  • 디자인 화면에서 마우스 오른쪽 단추를 클릭하고 새 항목 추가 -> 연결…을 선택합니다.
  • 관계의 한쪽 End는 복합성이 1인 Blog를 가리키고, 다른 End는 복합성이 인 Post를 가리키게 합니다.
    이는 한 Blog는 여러 Post를 가지며, 각 Post는 한 Blog에 속함을 의미합니다.
  • 'Post' 엔터티에 외래 키 속성 추가 상자가 선택되어 있는지 확인하고 확인을 클릭합니다.
    Blog 및 Post 간 연결이 완료된 연결 추가 화면

 

이제 데이터베이스를 생성하여 데이터를 읽고 쓸 수 있는 간단한 모델이 만들어졌습니다.
모델이 표시된 Entity Framework 디자이너

 

Visual Studio 2010의 추가 단계

Visual Studio 2010으로 작업할 경우 최신 버전의 Entity Framework로 업그레이드하기 위해 몇 가지 추가 단계를 수행해야 합니다. 최신 버그 수정을 포함하여 더 쉽게 사용할 수 있는 향상된 API 화면에 액세스할 수 있으므로 업그레이드하는 것이 좋습니다.

먼저 NuGet에서 Entity Framework의 최신 버전을 가져와야 합니다.

  • 프로젝트 –> NuGet 패키지 관리...
    NuGet 패키지 관리... 옵션이 표시되지 않으면 최신 버전의 NuGet을 설치해야 합니다.
  • 온라인 탭을 선택합니다.
  • EntityFramework 패키지를 선택합니다.
  • 설치를 클릭합니다.

그런 다음 모델을 교체하여 최신 버전의 Entity Framework에 도입된 DbContext API를 사용할 수 있도록 코드를 생성해야 합니다.

  • EF 디자이너에서 모델의 빈 곳을 마우스 오른쪽 단추로 클릭하고 코드 생성 항목 추가...를 선택합니다.
  • 왼쪽 메뉴에서 온라인 템플릿을 선택하고 DbContext를 검색합니다.
  • EF 5.x DbContext Generator for C#을 선택하고 이름으로 BloggingModel을 입력한 후 추가를 클릭합니다.
    EF 5.x DbContext Generator for C#이 선택된 코드 생성 항목 추가 대화 상자

 

3. 데이터베이스 생성

이 모델에서는 Entity Framework가 모델을 사용하여 데이터를 저장하고 검색할 수 있는 데이터베이스 스키마를 계산할 수 있습니다.

Visual Studio 버전에 따라 Visual Studio에서 설치하는 데이터베이스 서버가 달라집니다.

  • Visual Studio 2010을 사용할 경우 SQL Express 데이터베이스를 만듭니다.
  • Visual Studio 2012를 사용할 경우 LocalDb 데이터베이스를 만듭니다.

 

이제 데이터베이스를 만들겠습니다.

  • 디자인 화면에서 마우스 오른쪽 단추를 클릭하고 모델에서 데이터베이스 생성…을 선택합니다.
  • 새 연결...을 클릭하고 사용하는 Visual Studio의 버전에 따라 LocalDb((localdb)\v11.0) 또는 SQL Express(.\SQLEXPRESS) 중 하나를 지정한 후 데이터베이스 이름으로 ModelFirst.Blogging을 입력합니다.
    (localdb)\v11.0의 ModelFirst.Blogging 데이터베이스에 연결.\SQLEXPRESS의 ModelFirst.Blogging 데이터베이스에 연결
  • 확인을 선택한 후 새 데이터베이스를 만들 것인지 확인하는 메시지가 표시되면 를 선택합니다.
  • 다음을 선택하면 Entity Framework Designer 디자이너가 데이터베이스 스키마를 만들 스크립트를 계산합니다.
  • 스크립트가 표시되고 완료를 클릭하면 프로젝트에 추가된 스크립트가 열립니다.
  • 스크립트를 마우스 오른쪽 단추로 클릭하고 실행을 클릭하면 연결할 데이터베이스를 지정하라는 메시지가 표시됩니다. 사용 중인 Visual Studio 버전에 따라 (localdb)\v11.0 또는 .\SQLEXPRESS를 지정합니다.

 

4. 데이터 읽기 및 쓰기

이제 생성된 모델을 사용하여 몇 가지 데이터에 액세스해 보겠습니다. EDMX 파일에 기반하여 데이터에 액세스하는 데 사용할 클래스가 자동 생성됩니다.

이 스크린 샷은 Visual Studio 2012 버전을 사용하며, Visual Studio 2010을 사용할 경우 BloggingModel.tt 및 BloggingModel.Context.tt 파일이 EDMX 파일 아래 중첩되는 대신 프로젝트 아래 바로 표시됩니다.

확장되어 생성된 코드 파일을 표시하는 솔루션 탐색기 

 

아래와 같이 Program.cs에서 Main 메서드를 구현합니다. 이 코드는 컨텍스트에 대한 새 인스턴스를 만들고 이를 사용해서 새 블로그를 삽입합니다. 그런 후 LINQ 쿼리를 사용해서 제목별로 알파벳순으로 정렬된 모든 블로그를 데이터베이스에서 검색합니다.

class Program 

    static void Main(string[] args) 
    { 
        using (var db = new BloggingContext()) 
        { 
            // Create and save a new Blog 
            Console.Write("Enter a name for a new Blog: "); 
            var name = Console.ReadLine(); 
 
            var blog = new Blog { Name = name }; 
            db.Blogs.Add(blog); 
            db.SaveChanges(); 
 
            // Display all Blogs from the database 
            var query = from b in db.Blogs 
                        orderby b.Name 
                        select b; 
 
            Console.WriteLine("All blogs in the database:"); 
            foreach (var item in query) 
            { 
                Console.WriteLine(item.Name); 
            } 
 
            Console.WriteLine("Press any key to exit..."); 
            Console.ReadKey(); 
        } 
    } 
}

이제 응용 프로그램을 실행하고 테스트할 수 있습니다.

Enter a name for a new Blog: ADO.NET Blog
All blogs in the database:
ADO.NET 블로그
Press any key to exit...

 

5. 모델 변경 사항 처리

이제 모델을 변경해 보겠습니다. 이러한 변경 사항을 반영하려면 데이터베이스 스키마를 업데이트해야 합니다.

모델에 새 User 엔터티를 추가해 보겠습니다.

  • Username 키 이름의 새 User 엔터티 이름을 추가하고 키의 속성 유형으로 문자열을 지정합니다.
    User 엔터티 입력이 완료된 엔터티 추가 대화 상자
  • 디자인 화면의 Username 속성을 마우스 오른쪽 단추로 클릭한 다음 속성을 선택하고 속성 창에서 MaxLength 설정을 50으로 변경합니다.
    이렇게 하면 Username에 저장할 수 있는 데이터가 50자로 제한됩니다.
  • User 엔터티에 DisplayName 스칼라 속성을 추가합니다.

 

이제 모델이 업데이트되어 새 User 엔터티 형식에 맞게 데이터베이스를 업데이트할 수 있습니다.

  • 디자인 화면에서 마우스 오른쪽 단추를 클릭하고 모델에서 데이터베이스 생성...을 선택하면 Entity Framework가 업데이트된 모델을 바탕으로 스키마를 다시 만들 스크립트를 계산합니다.
  • 마침을 클릭합니다.
  • 기존 DDL 스크립트와 모델의 매핑 및 저장소 부분을 덮어쓴다는 경고 메시지가 표시되면 두 경고에 대해 모두 를 클릭합니다.
  • 데이터베이스를 만들 업데이트된 SQL 스크립트가 열립니다.
    생성된 스크립트는 기존의 모든 테이블을 삭제하고 처음부터 다시 스키마를 만듭니다. 로컬 개발과 달리 이미 배포된 데이터베이스에는 변경 사항을 바로 적용할 수 없습니다. 이미 배포된 데이터베이스에 변경 사항을 게시해야 할 경우 스크립트를 편집하거나 스키마 비교 도구를 사용하여 마이그레이션 스크립트를 계산해야 합니다.
  • 스크립트를 마우스 오른쪽 단추로 클릭하고 실행을 클릭하면 연결할 데이터베이스를 지정하라는 메시지가 표시됩니다. 사용 중인 Visual Studio 버전에 따라 (localdb)\v11.0 또는 .\SQLEXPRESS를 지정합니다.

 

요약

이 연습에서는 EF 디자이너에서 모델을 만든 다음 그 모델에서 데이터베이스를 만드는 Model First 개발에 대해 알아 보았습니다. 또한 모델을 사용하여 데이터베이스에서 몇 가지 데이터를 읽고 써 본 다음, 모델을 업데이트한 후 새 모델에 맞게 데이터베이스 스키마를 다시 만들어 보았습니다.


+ Recent posts