모델 우선

이 비디오 및 단계별 연습에서는 Entity Framework를 사용한 Model First 개발에 대한 소개를 제공합니다. Model First를 사용하면 Entity Framework Designer를 사용하여 새 모델을 만든 다음 모델에서 데이터베이스 스키마를 생성할 수 있습니다. 모델은 EDMX 파일(.edmx 확장명)에 저장되며 Entity Framework Designer에서 보고 편집할 수 있습니다. 애플리케이션에서 상호 작용하는 클래스는 EDMX 파일에서 자동으로 생성됩니다.

비디오 보기

이 비디오 및 단계별 연습에서는 Entity Framework를 사용한 Model First 개발에 대한 소개를 제공합니다. Model First를 사용하면 Entity Framework Designer를 사용하여 새 모델을 만든 다음 모델에서 데이터베이스 스키마를 생성할 수 있습니다. 모델은 EDMX 파일(.edmx 확장명)에 저장되며 Entity Framework Designer에서 보고 편집할 수 있습니다. 애플리케이션에서 상호 작용하는 클래스는 EDMX 파일에서 자동으로 생성됩니다.

발표자: 로완 밀러

비디오: WMV | MP4 | WMV(ZIP)

필수 구성 요소

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

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

1. 애플리케이션 만들기

작업을 간단하게 유지하기 위해 Model First를 사용하여 데이터 액세스를 수행하는 기본 콘솔 애플리케이션을 빌드합니다.

  • Visual Studio를 엽니다.
  • 파일 -> 새로 만들기 -> 프로젝트...
  • 왼쪽 메뉴 및 콘솔 애플리케이션에서 Windows 선택
  • 이름으로 ModelFirstSample 입력
  • 확인을 선택합니다.

2. 모델 만들기

Visual Studio의 일부로 포함된 Entity Framework Designer를 사용하여 모델을 만들겠습니다.

  • 프로젝트 -> 새 항목 추가...

  • 왼쪽 메뉴에서 데이터를 선택한 다음 ADO.NET 엔터티 데이터 모델을 선택하세요.

  • 이름으로 BloggingModel 을 입력하고 확인을 클릭합니다. 그러면 엔터티 데이터 모델 마법사가 시작됩니다.

  • 빈 모델을 선택하고 마침을 클릭합니다.

    빈 모델 만들기

Entity Framework 디자이너가 빈 모델로 열립니다. 이제 모델에 엔터티, 속성 및 연결을 추가할 수 있습니다.

  • 디자인 화면을 마우스 오른쪽 단추로 클릭하고 속성을 선택합니다.

  • 속성 창에서 엔터티 컨테이너 이름을BloggingContext로 변경합니다. 이 이름은 자동으로 생성될 파생 컨텍스트의 이름이며, 컨텍스트는 데이터베이스와의 세션을 나타내며 데이터를 쿼리하고 저장할 수 있습니다.

  • 디자인 화면을 마우스 오른쪽 단추로 클릭하고 새로 추가 -> 엔터티를 선택합니다.

  • 블로그를 엔터티 이름으로 입력하고BlogId를 키 이름으로 입력하고 확인을 클릭합니다.

    블로그 엔터티 추가

  • 디자인 화면에서 새 엔터티를 마우스 오른쪽 단추로 클릭하고 새로 추가 -> 스칼라 속성을 선택하고 속성 이름으로 이름을 입력합니다.

  • 이 프로세스를 반복하여 Url 속성을 추가합니다.

  • 디자인 화면에서 Url 속성을 마우스 오른쪽 단추로 클릭하고 속성을 선택합니다. 속성 창에서 Nullable 설정을 True로 변경합니다. 이렇게 하면 Url을 할당하지 않고 데이터베이스에 블로그를 저장할 수 있습니다.

  • 방금 배운 기술을 사용하여 PostId 키 속성을 사용하여 Post 엔터티를 추가합니다.

  • Post 엔터티에 제목콘텐츠 스칼라 속성 추가

이제 엔터티가 몇 개 있으므로 엔터티 간에 연결(또는 관계)을 추가해야 합니다.

  • 디자인 화면을 마우스 오른쪽 단추로 클릭하고 새로 추가 -> 연결...

  • 관계의 한쪽 끝을 블로그로 하고 그쪽의 배수를 하나로 하며, 다른 끝점은 게시물로 하고 그쪽의 배수를 여러로 합니다. 즉, 블로그에는 게시물이 많고 게시물은 하나의 블로그에 속합니다.

  • 'Post' 엔터티에 외래 키 속성 추가 확인란이 선택되어 있는지 확인하고 [확인]을 클릭합니다.

    연관 MF 추가

이제 데이터베이스를 생성하고 데이터를 읽고 쓰는 데 사용할 수 있는 간단한 모델이 있습니다.

모델 초기

Visual Studio 2010의 추가 단계

Visual Studio 2010에서 작업하는 경우 최신 버전의 Entity Framework로 업그레이드하기 위해 따라야 하는 몇 가지 추가 단계가 있습니다. 업그레이드는 개선된 API 화면에 대한 액세스 권한을 제공하므로 훨씬 더 쉽게 사용할 수 있고 최신 버그 수정도 수행할 수 있기 때문에 중요합니다.

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

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

다음으로, 이후 버전의 Entity Framework에서 도입된 DbContext API를 사용하는 코드를 생성하기 위해 모델을 교환해야 합니다.

  • EF 디자이너에서 모델의 빈 지점을 마우스 오른쪽 단추로 클릭하고 코드 생성 항목 추가를 선택합니다.

  • 왼쪽 메뉴에서 온라인 템플릿을 선택하고 DbContext를 검색합니다.

  • C#용 EF 5.x DbContext 생성기를 선택하고 이름으로 BloggingModel을 입력하고 추가를 클릭합니다.

    DbContext 템플릿

3. 데이터베이스 생성

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

Visual Studio와 함께 설치된 데이터베이스 서버는 설치한 Visual Studio 버전에 따라 다릅니다.

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

계속해서 데이터베이스를 생성해 보겠습니다.

  • 디자인 화면을 마우스 오른쪽 단추로 클릭하고 모델에서 데이터베이스 생성을 선택합니다.

  • 새 연결을 클릭하고 사용 중인 Visual Studio 버전에 따라 LocalDB 또는 SQL Express를 지정하고 데이터베이스 이름으로 ModelFirst.Blogging을 입력합니다.

    LocalDB 연결 MF

    SQL Express 연결 MF

  • 확인을 선택하면 새 데이터베이스를 만들 것인지 묻는 메시지가 표시되고 예를 선택합니다.

  • 다음을 선택하면 Entity Framework Designer에서 데이터베이스 스키마를 만드는 스크립트를 계산합니다.

  • 스크립트가 표시되면 마침 을 클릭하면 스크립트가 프로젝트에 추가되고 열립니다.

  • 스크립트를 마우스 오른쪽 단추로 클릭하고 실행을 선택합니다. 사용 중인 Visual Studio 버전에 따라 연결할 데이터베이스를 지정하고 LocalDB 또는 SQL Server Express를 지정하라는 메시지가 표시됩니다.

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 Blog
Press any key to exit...

5. 모델 변경 처리

이제 모델을 몇 가지 변경해야 합니다. 이러한 변경을 할 때 데이터베이스 스키마도 업데이트해야 합니다.

먼저 모델에 새 사용자 엔터티를 추가합니다.

  • 키 이름으로 Username을 사용하여 새 사용자 엔터티 이름을 추가하고, String을 키의 속성 형식으로 추가합니다.

    사용자 엔터티 추가

  • 디자인 화면에서 사용자 이름 속성을 마우스 오른쪽 단추로 클릭하고 속성을 선택합니다. 속성 창에서 MaxLength 설정을 50으로 변경하면 사용자 이름에 저장할 수 있는 데이터가 50자로 제한됩니다.

  • User 엔터티에 DisplayName 스칼라 속성 추가

이제 업데이트된 모델이 있으며 새 사용자 엔터티 유형을 수용하도록 데이터베이스를 업데이트할 준비가 되었습니다.

  • 디자인 화면을 마우스 오른쪽 단추로 클릭하고 모델에서 데이터베이스 생성을 선택합니다. Entity Framework는 업데이트된 모델을 기반으로 스키마를 다시 만드는 스크립트를 계산합니다.
  • 마침 클릭하세요
  • 기존 DDL 스크립트 및 모델의 매핑 및 스토리지 부분을 덮어쓰는 것에 대한 경고가 표시될 수 있습니다. 두 경고 모두에 대해 예를 클릭합니다.
  • 데이터베이스를 만드는 업데이트된 SQL 스크립트가 열립니다.
    생성된 스크립트는 모든 기존 테이블을 삭제한 다음 스키마를 처음부터 다시 만듭니다. 이는 로컬 개발에 사용할 수 있지만 이미 배포된 데이터베이스에 변경 내용을 푸시하는 데는 적합하지 않습니다. 이미 배포된 데이터베이스에 변경 내용을 게시해야 하는 경우 스크립트를 편집하거나 스키마 비교 도구를 사용하여 마이그레이션 스크립트를 계산해야 합니다.
  • 스크립트를 마우스 오른쪽 단추로 클릭하고 실행을 선택합니다. 사용 중인 Visual Studio 버전에 따라 연결할 데이터베이스를 지정하고 LocalDB 또는 SQL Server Express를 지정하라는 메시지가 표시됩니다.

요약

이 연습에서는 EF 디자이너에서 모델을 만든 다음 해당 모델에서 데이터베이스를 생성할 수 있는 Model First 개발을 살펴보았습니다. 그런 다음 모델을 사용하여 데이터베이스에서 일부 데이터를 읽고 씁니다. 마지막으로 모델을 업데이트한 다음 모델과 일치하도록 데이터베이스 스키마를 다시 만듭니다.