ASP.NET MVC를 활용하면 간편하게 기본 웹사이트 구조를 구축할 수 있다. MVC에서 Model의 영역에 해당하는 부분을 Entity Framework를 사용하여 Database Table 기반의 개체들을 개발 소스단에서 사용하는 객체화를 보다 쉽게 만들 수 있다. 즉, Entity Framework는 .NET ORM Framework로 Table 컬럼과 Database 관계를 C# Object화해주는 Framework이다. 또한, Entity Framework단에서 LINQ를 사용하여 Object 질의를 할 수 있다.
[그림1 - Entity Framework 구조]
위 그림처럼 Entity Framework의 기본 구조를 살펴보면 Entity Framework는 기존 ADO.NET Data Providers 기반에서 EntityClient Data Provider가 제공된다. 즉, 기존의 ADO.NET을 기대로 활용한다는 것이다. EntityClient Data Provider를 통해서 소스 코드에서 사용할 C# Object Services를 만들어준다. 개발자는 Object들을 Entity SQL 나 기존에 익숙한 LINQ를 사용하여 원하는 데이터를 질의 할 수 있다. Entity Framework를 사용했을 때 가질 수 있는 장점을 MSDN에서는 다음과 같이 정리하고 있다.
Entity Framework의 장점
- 1. 개발시간 절감된다.
- 2. 개발자는 응용프로그램을 구현하는 입장에서 객체 모델의 관점에서 작업할 수 있다.
- 3. 응용프로그램은 독립적인 개념적 모델을 지원함으로써 실제 데이터 저장소에 대한 종속이 해방될 수 있다.
- 4. 객체 모델과 특정 데이터 저장소의 스키마 사이의 매핑인 응용프로그램의 코드를 변경하지 않고도 가능하다.
- 5. LINQ지원으로 개념적 모델에 대한 질의 시에 인텔리센스가 제공되며 컴파일 타임에서 구문 유효성 검사가 제공된다.
우리는 지금 ASP.NET MVC 프로젝트 기반에서 Entity Framework를 살펴보고 있기 때문에 Entity Framework에 대해서는 이쯤에서 정리하고 이제 Entity Framework를 ASP.NET MVC에서 추가하여 사용하는 방법에 대해서 살펴보자.
1. Entity Framework 참조하기
Nuget Gallery를 사용하여 최신버전의 Entity Framework를 참조한다. (Nuget Gallery에 대해서는 아래 Note를 확인하세요.)
[그림2 - Neget 패키지 관리]
프로젝트에서 Nuget패키지 관리를 선택한다.
[그림3 - Entity Framework 참조]
좌측에서 온라인 탭을 선택하고 우측 검색어를 입력한다. 리스트에 출력된 EntityFramework를 해당 프로젝트에 설치한다. 패키지 단위로 프로젝트에 참조가 된다. 현 시점에서는 Entity Framework 4.3.1 이 최신이군요.
[그림4 - Entity Framework 개체 속성]
참조된 EntityFramework 어셈블리를 확인해보면 버전이나 프로젝트에 참조된 경로를 다음과 같이 확인 할 수 있습니다. 그럼Entity Framework를 참조하는게 끝났습니다.
2. Database 개체들 C# 객체화하기
소스 코드에서 사용할 객체들을 만들어보겠습니다. 프로젝트에 ADO.Net 엔터티 데이터 모델 항목을 추가합니다.
[그림5 - EDMX 추가]
EFModel.edmx를 생성합니다.
[그림6 - Database 생성]
데이터베이스에서 생성을 선택하고 연결할 데이터베이스를 설정해주세요.
[그림7 - Entity Framework ConnectionString 설정]
연결문자열을 선택한 후 다음을 진행합니다. 쉽게 얻을수 있는 AdventureWorks로 데모를 보여드리겠습니다.
[그림8 - Database 개체 선택]
우선 테이블 개체들을 선택해서 가져오겠습니다.
3. Object 질의
기본적인 CRUD 소스코드를 작성해보겠습니다.
public List<Department> GetDepartmentList()
{
using (AdventureWorksEntities ef = new AdventureWorksEntities())
{
return ef.Department.ToList();
}
}
public Department AddDepartment(Department item)
{
using (AdventureWorksEntities ef = new AdventureWorksEntities())
{
ef.Department.AddObject(item);
ef.SaveChanges();
}
return item;
}
public Department UpdateDepartment(Department item)
{
using (AdventureWorksEntities ef = new AdventureWorksEntities())
{
ef.Department.Attach(item);
ef.SaveChanges();
}
return item;
}
public bool RemoveDepartment(Department item)
{
bool retValue = false;
using (AdventureWorksEntities ef = new AdventureWorksEntities())
{
Department targetItem = ef.Department.SingleOrDefault(x => x.DepartmentID == item.DepartmentID);
ef.Department.DeleteObject(targetItem);
int iResult = ef.SaveChanges();
if (iResult > 0)
retValue = true;
}
return retValue;
}
자세한 부분은 샘플 프로젝트를 첨부하니 다운받아서 실행하거나 소스코드를 확인해보기를 바란다. 여기서는 결과 화면만 확인해보겠다.
[그림9 - 실행결과]
Note!
Nuget Gallery란 Visual studio 확장 툴로 참조할 라이브러리를 검색하여 프로젝트에 DLL 참조를 쉽게 제공한다. 누구나 자신이 만든 라이브러리를 패키징하여 Nuget에 올릴 수도 있고 다운 받을 수 있다. 온라인으로 검색이 되기 때문에 최신 버전의 패키지를 참조할 수 있다는 부분에서 장점을 갖는다.
생각보다 글이 길어졌는데 끝까지 읽어주셔서 감사합니다.
훈스닷넷 : http://www.hoons.kr/Lecture/LectureMain.aspx?BoardIdx=50776&kind=60&view=0