다음을 통해 공유


Database First

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

비디오 보기

이 비디오에서는 Entity Framework를 사용한 Database First 개발에 대한 소개를 제공합니다. Database First를 사용하면 기존 데이터베이스에서 모델을 리버스 엔지니어링할 수 있습니다. 모델은 EDMX 파일(.edmx 확장명)에 저장되며 Entity Framework 디자이너에서 보고 편집할 수 있습니다. 애플리케이션에서 상호 작용하는 클래스는 EDMX 파일에서 자동으로 생성됩니다.

작성자: Rowan Miller

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

필수 구성 요소

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

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

 

1. 기존 데이터베이스 만들기

일반적으로 기존 데이터베이스를 대상으로 하는 경우 이미 만들어져 있겠지만 이 연습에서는 액세스할 데이터베이스를 만들어야 합니다.

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

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

 

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

  • Visual Studio를 엽니다.

  • 보기 -> 서버 탐색기

  • 데이터 연결 -> 연결 추가...를 마우스 오른쪽 단추로 클릭합니다.

  • 서버 탐색기에서 데이터베이스에 연결하지 않은 경우 Microsoft SQL Server를 데이터 원본으로 선택해야 합니다.

    Select Data Source

  • 설치한 항목에 따라 LocalDB 또는 SQL Express에 연결하고 데이터베이스 이름으로 DatabaseFirst.Blogging을 입력합니다.

    Sql Express Connection DF

    LocalDB Connection DF

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

    Create Database Dialog

  • 이제 새 데이터베이스가 서버 탐색기에 표시됩니다. 마우스 오른쪽 단추로 클릭하고 새 쿼리를 선택합니다.

  • 다음 SQL을 새 쿼리에 복사한 다음 쿼리를 마우스 오른쪽 단추로 클릭하고 실행을 선택합니다.

CREATE TABLE [dbo].[Blogs] (
    [BlogId] INT IDENTITY (1, 1) NOT NULL,
    [Name] NVARCHAR (200) NULL,
    [Url]  NVARCHAR (200) NULL,
    CONSTRAINT [PK_dbo.Blogs] PRIMARY KEY CLUSTERED ([BlogId] ASC)
);

CREATE TABLE [dbo].[Posts] (
    [PostId] INT IDENTITY (1, 1) NOT NULL,
    [Title] NVARCHAR (200) NULL,
    [Content] NTEXT NULL,
    [BlogId] INT NOT NULL,
    CONSTRAINT [PK_dbo.Posts] PRIMARY KEY CLUSTERED ([PostId] ASC),
    CONSTRAINT [FK_dbo.Posts_dbo.Blogs_BlogId] FOREIGN KEY ([BlogId]) REFERENCES [dbo].[Blogs] ([BlogId]) ON DELETE CASCADE
);

2. 애플리케이션 만들기

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

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

 

3. 리버스 엔지니어링 모델

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

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

  • 왼쪽 창에서 데이터를 선택한 다음 ADO.NET 엔터티 데이터 모델을 선택합니다.

  • 이름으로 BloggingModel을 입력하고 확인을 클릭합니다.

  • 그러면 엔터티 데이터 모델 마법사가 시작됩니다.

  • 데이터베이스에서 생성을 선택하고 다음을 클릭합니다.

    Wizard Step 1

  • 첫 번째 섹션에서 만든 데이터베이스에 대한 연결을 선택하고 연결 문자열의 이름으로 BloggingContext를 입력한 후 다음을 클릭합니다.

    Wizard Step 2

  • '테이블' 옆의 확인란을 클릭하여 모든 테이블을 가져오고 '마침'을 클릭합니다.

    Wizard Step 3

 

리버스 엔지니어링 프로세스가 완료되면 새 모델이 프로젝트에 추가되고 Entity Framework Designer에서 볼 수 있도록 열립니다. 데이터베이스에 대한 연결 세부 정보가 포함된 App.config 파일도 프로젝트에 추가되었습니다.

Model Initial

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 Template

 

4. 데이터 읽기 및 쓰기

이제 모델을 사용하여 일부 데이터에 액세스해야 합니다. 데이터에 액세스하는 데 사용할 클래스는 EDMX 파일을 기반으로 자동으로 생성됩니다.

이 스크린샷은 Visual Studio 2012에서 찍은 것으로, Visual Studio 2010을 사용하는 경우 BloggingModel.tt 및 BloggingModel.Context.tt 파일은 EDMX 파일 아래에 중첩되지 않고 프로젝트 바로 아래에 있습니다.

Generated Classes DF

 

아래와 같이 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. 5. 데이터베이스 변경 내용 처리

이제 데이터베이스 스키마를 몇 가지 변경해야 하며, 이러한 변경을 수행할 때 이러한 변경 내용을 반영하도록 모델을 업데이트해야 합니다.

첫 번째 단계는 데이터베이스 스키마를 일부 변경하는 것입니다. 스키마에 사용자 테이블을 추가하겠습니다.

  • 서버 탐색기에서 DatabaseFirst.Blogging 데이터베이스를 마우스 오른쪽 단추로 클릭하고 새 쿼리를 선택합니다.
  • 다음 SQL을 새 쿼리에 복사한 다음 쿼리를 마우스 오른쪽 단추로 클릭하고 실행을 선택합니다.
CREATE TABLE [dbo].[Users]
(
    [Username] NVARCHAR(50) NOT NULL PRIMARY KEY,  
    [DisplayName] NVARCHAR(MAX) NULL
)

스키마가 업데이트되었으므로 이제 해당 변경 내용으로 모델을 업데이트해야 합니다.

  • EF 디자이너에서 모델의 빈 지점을 마우스 오른쪽 단추로 클릭하고 '데이터베이스에서 모델 업데이트...'를 선택하면 업데이트 마법사가 시작됩니다.

  • 업데이트 마법사의 추가 탭에서 테이블 옆의 확인란을 선택하면 스키마에서 새 테이블을 추가하려고 함을 나타냅니다. 새로 고침 탭에는 업데이트 중에 변경 내용을 확인할 모델의 기존 테이블이 표시됩니다. 삭제 탭에는 스키마에서 제거된 테이블이 표시되며 업데이트의 일부로 모델에서도 제거됩니다. 이러한 두 탭에 대한 정보는 자동으로 검색되며 정보 제공 목적으로만 제공되므로 설정을 변경할 수 없습니다.

    Refresh Wizard

  • 업데이트 마법사에서 마침을 클릭합니다.

 

이제 데이터베이스에 추가한 사용자 테이블에 매핑되는 새 사용자 엔터티를 포함하도록 모델이 업데이트되었습니다.

Model Updated

요약

이 연습에서는 기존 데이터베이스를 기반으로 EF 디자이너에서 모델을 만들 수 있는 Database First 개발을 살펴보았습니다. 그런 다음 해당 모델을 사용하여 데이터베이스에서 일부 데이터를 읽고 씁니다. 마지막으로 데이터베이스 스키마에 대한 변경 내용을 반영하도록 모델을 업데이트했습니다.