이 비디오 및 단계별 연습에서는 Entity Framework를 사용한 Database First 개발에 대한 소개를 제공합니다. Database First를 사용하면 기존 데이터베이스에서 모델을 리버스 엔지니어링할 수 있습니다. 모델은 EDMX 파일(.edmx 확장명)에 저장되며 Entity Framework Designer에서 보고 편집할 수 있습니다. 애플리케이션에서 상호 작용하는 클래스는 EDMX 파일에서 자동으로 생성됩니다.
비디오 보기
이 비디오에서는 Entity Framework를 사용한 Database First 개발에 대한 소개를 제공합니다. Database First를 사용하면 기존 데이터베이스에서 모델을 리버스 엔지니어링할 수 있습니다. 모델은 EDMX 파일(.edmx 확장명)에 저장되며 Entity Framework Designer에서 보고 편집할 수 있습니다. 애플리케이션에서 상호 작용하는 클래스는 EDMX 파일에서 자동으로 생성됩니다.
발표자: 로완 밀러
필수 구성 요소
이 연습을 완료하려면 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를 데이터 원본으로 선택하기 전에 서버 탐색기에서 데이터베이스에 연결하지 않은 경우
설치한 항목에 따라 LocalDB 또는 SQL Express에 연결하고 DatabaseFirst.Blogging 을 데이터베이스 이름으로 입력합니다.
확인을 선택하면 새 데이터베이스를 만들 것인지 묻는 메시지가 표시되고 예를 선택합니다.
이제 새 데이터베이스가 서버 탐색기에 표시되고 마우스 오른쪽 단추로 클릭하고 새 쿼리를 선택합니다.
다음 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을 입력하고 확인을 클릭합니다.
엔터티 데이터 모델 마법사
가 실행됩니다. 데이터베이스에서 생성을 선택하고 다음을 클릭합니다.
첫 번째 섹션에서 만든 데이터베이스에 대한 연결을 선택하고, 연결 문자열의 이름으로 BloggingContext를 입력하고, 다음을 클릭합니다.
'테이블' 옆의 확인란을 클릭하여 모든 테이블을 가져오고 '마침'을 클릭합니다.
리버스 엔지니어링 프로세스가 완료되면 새 모델이 프로젝트에 추가되고 Entity Framework Designer에서 볼 수 있도록 열립니다. 데이터베이스에 대한 연결 세부 정보가 포함된 App.config 파일도 프로젝트에 추가되었습니다.
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을 입력하고 추가를 클릭합니다.
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. 데이터베이스 변경 내용 처리
이제 데이터베이스 스키마를 몇 가지 변경해야 합니다. 이러한 변경 내용을 적용할 때도 이러한 변경 내용을 반영하도록 모델을 업데이트해야 합니다.
첫 번째 단계는 데이터베이스 스키마를 일부 변경하는 것입니다. 스키마에 사용자 테이블을 추가하겠습니다.
- 서버 탐색기에서 DatabaseFirst.Blogging 데이터베이스를 마우스 오른쪽 단추로 클릭하고 새 쿼리를 선택합니다.
- 다음 SQL을 새 쿼리에 복사한 다음 쿼리를 마우스 오른쪽 단추로 클릭하고 실행을 선택합니다.
CREATE TABLE [dbo].[Users]
(
[Username] NVARCHAR(50) NOT NULL PRIMARY KEY,
[DisplayName] NVARCHAR(MAX) NULL
)
스키마가 업데이트되었으므로 이제 해당 변경 내용으로 모델을 업데이트해야 합니다.
EF 디자이너에서 모델의 빈 지점을 마우스 오른쪽 단추로 클릭하고 '데이터베이스에서 모델 업데이트...'를 선택하면 업데이트 마법사가 시작됩니다.
업데이트 마법사의 추가 탭에서 테이블 옆의 확인란을 선택하면 스키마에서 새 테이블을 추가하려고 함을 나타냅니다. 새로 고침 탭에는 업데이트 중에 변경 내용을 확인할 모델의 기존 테이블이 표시됩니다. 삭제 탭에는 스키마에서 제거된 테이블이 표시되며 업데이트의 일부로 모델에서도 제거됩니다. 이러한 두 탭에 대한 정보는 자동으로 검색되며 정보 제공 목적으로만 제공되므로 설정을 변경할 수 없습니다.
업데이트 마법사에서 마침 클릭
이제 데이터베이스에 추가한 사용자 테이블에 매핑되는 새 사용자 엔터티를 포함하도록 모델이 업데이트되었습니다.
요약
이 연습에서는 기존 데이터베이스를 기반으로 EF Designer에서 모델을 만들 수 있는 Database First 개발을 살펴보았습니다. 그런 다음 해당 모델을 사용하여 데이터베이스에서 일부 데이터를 읽고 씁니다. 마지막으로 데이터베이스 스키마에 대한 변경 내용을 반영하도록 모델을 업데이트했습니다.
.NET