엔터티 데이터 사용

Entity Framework 에서는 개념적 모델 및 저장소 모델 메타데이터를 두 모델 간의 매핑과 함께 클라이언트 뷰라는 양방향 쌍으로 된 Entity SQL 문으로 컴파일합니다. 이 뷰는 쿼리를 구동하고 런타임 엔진 내의 처리를 업데이트합니다. 뷰를 생성하는 매핑 컴파일러는 디자인 타임에 호출할 수도 있고 첫 번째 쿼리가 개념적 모델에 대해 실행되는 런타임에 호출할 수도 있습니다 .

Entity Framework 는 기본 데이터 공급자 및 데이터 소스에 EntityConnection을 제공하는 방법으로 저장소별 ADO.NET 데이터 공급자를 기반으로 빌드됩니다.

쿼리를 실행하면 쿼리에 대한 구문 분석이 수행되고 정식 명령 트리로 변환됩니다. 명령 트리는 쿼리의 개체 모델 표현입니다. 정식 명령 트리는 select, update, insert, delete 명령을 나타냅니다. 이후 모든 처리는 System.Data.EntityClient 공급자와 기본 .NET Framework 데이터 공급자(예: System.Data.SqlClient) 간의 통신 수단인 정식 명령 트리에서 수행됩니다.

다음 다이어그램은 데이터 액세스를 위한 Entity Framework 아키텍처를 보여 줍니다.

Entity Framework 아키텍처 다이어그램

개체 쿼리

ADO.NET 엔터티 데이터 모델 도구는 개념적 모델에 정의된 엔터티 컨테이너를 나타내는 ObjectContext에서 파생된 클래스를 생성합니다. ObjectContext 클래스는 엔터티를 개체 형태로 반환하는 개념적 모델에 대한 쿼리뿐만 아니라 엔터티 개체 생성, 업데이트, 삭제 등의 작업도 지원합니다. Entity Framework 는 개념적 모델에 대한 개체 쿼리를 지원합니다. 쿼리는 Entity SQL , LINQ(Language-Integrated Query), 개체 쿼리 작성기 메서드를 사용하여 작성할 수 있습니다.

개념적 모델에서 엔터티는 연결을 통해 서로 연관됩니다. 개체 계층에서 이러한 연결은 엔터티 참조를 기반으로 하여 관련 개체 컬렉션을 공개하는 속성으로 표현됩니다 예를 들어, School 모델에서 Department.CourseCourseDepartment 사이의 연결을 기반으로 하여 Course 개체의 엔터티 컬렉션을 가져옵니다. ObjectContext 클래스의 LazyLoadingEnabled 속성이 false로 설정된 경우 참조된 개체가 자동으로 로드되지 않으므로 엔터티 참조의 Load 메서드를 호출하여 관련 개체 데이터를 개체 컨텍스트에 로드해야 합니다.

Bb399760.note(ko-kr,VS.100).gif참고:
엔터티 데이터 모델 디자이너를 사용하여 개체 계층 코드를 생성한 경우 ObjectContext 클래스의 LazyLoadingEnabled 속성이 기본적으로 true로 설정됩니다.

반환된 개체와 함께 로드할 관련 개체를 정의하는 쿼리 경로도 지정할 수 있습니다. 자세한 내용은 개념적 모델 쿼리(Entity Framework)을 참조하십시오.

퀵 스타트에서 확인할 수 있는 다음 예제는 실행 시 모든 Department 개체를 검색하는 쿼리를 보여 줍니다. 쿼리 경로 정의는 Department 개체와 관련된 Course 개체도 반환하며, Entity SQL ORDER BY 절은 반환된 개체를 Name별로 정렬합니다.

' Define a query that returns all Department objects
' and related Course objects, ordered by name.
Dim departmentQuery As ObjectQuery(Of Department) = _
    From d In schoolContext.Departments.Include("Courses") _
    Order By d.Name _
    Select d
// Define a query that returns all Department  
// objects and course objects, ordered by name.
var departmentQuery = from d in schoolContext.Departments.Include("Courses")
                      orderby d.Name
                      select d;

자세한 내용은 개념적 모델 쿼리(Entity Framework)를 참조하십시오.

저장 프로시저를 사용하여 데이터 소스에서 쿼리를 실행하는 모델의 집합을 정의할 수 있습니다. 이런 저장 프로시저의 결과 집합은 개념적 모델의 엔터티에 매핑됩니다. 자세한 내용은 How to: Import a Stored Procedure를 참조하십시오.

개체 사용

개체 컨텍스트의 개체는 데이터 소스에서 데이터를 나타내는 엔터티 형식입니다. 개체 컨텍스트에서 개체를 수정하거나 만들거나 삭제할 수 있습니다. 개체 컨텍스트는 ID 및 개체 간의 관계를 관리합니다. 개체를 serialize하고 개체를 컨트롤에 바인딩할 수도 있습니다. 자세한 내용은 개체 사용(Entity Framework)을 참조하십시오.

퀵 스타트에서 확인할 수 있는 다음 예제는 Department 개체와 관련된 Course 개체의 컬렉션을 가져와 이를 DataGridView 컨트롤에 바인딩합니다.

' Get the object for the selected department.
Dim department As Department = _
    CType(Me.departmentList.SelectedItem, Department)

' Bind the grid view to the collection of Course objects 
' that are related to the selected Department object.
courseGridView.DataSource = department.Courses
//Get the object for the selected department.
Department department = (Department)this.departmentList.SelectedItem;

//Bind the grid view to the collection of Course objects
// that are related to the selected Department object.
courseGridView.DataSource = department.Courses;

Entity Framework는 엔터티 데이터 변경을 추적하며, 사용자는 이를 통해 변경 내용을 다시 데이터 소스에 보관할 수 있습니다. 퀵 스타트에서 확인할 수 있는 다음 예제에서는 개체 컨텍스트의 변경 내용이 데이터베이스에 기록됩니다.

' Save object changes to the database, 
' display a message, and refresh the form.
schoolContext.SaveChanges()

자세한 내용은 개체 만들기, 추가, 수정 및 삭제(Entity Framework)를 참조하십시오.

저장 프로시저를 사용하여 데이터 소스에서 데이터를 삽입, 업데이트 및 삭제하는 개념적 모델을 정의할 수 있습니다. 이런 저장 프로시저는 개념적 모델의 엔터티에 매핑됩니다. 자세한 내용은 Walkthrough: Mapping an Entity to Stored Procedures을 참조하십시오.

참고 항목

개념

개체 사용(Entity Framework)
LINQ to Entities의 쿼리