다음을 통해 공유


개체 사용(Entity Framework)

Entity Framework 를 사용하면 엔터티 형식의 인스턴스인 형식화된 CLR(공용 언어 런타임) 개체로 표현된 데이터를 쿼리, 삽입, 업데이트 및 삭제할 수 있습니다. 엔터티 형식은 개념적 모델에서 정의된 엔터티를 나타냅니다. Entity Framework 는 개념적 모델에서 정의된 엔터티와 관계를 데이터 소스에 매핑합니다. Entity Framework 에서는 데이터 소스에서 개체로 반환된 데이터를 구체화하고, 개체의 변경 내용을 추적하고, 동시성을 처리하고, 개체 변경 내용을 데이터 소스에 다시 전파하고, 개체를 컨트롤에 바인딩하는 기능을 제공합니다. LINQ to Entities, Entity SQL 언어 또는 쿼리 작성기 메서드(Entity Framework)를 사용하여 개념적 모델에 대해 쿼리를 실행할 수 있습니다. 자세한 내용은 개념적 모델 쿼리(Entity Framework)를 참조하십시오.

ObjectContext 클래스는 엔터티 개체와 상호 작용하기 위한 기본 클래스입니다. ObjectContext 클래스의 인스턴스는 데이터베이스에 대한 연결, 모델을 설명하는 메타데이터 및 생성, 업데이트 및 삭제 작업 중에 개체를 추적하는 ObjectStateManager 개체를 캡슐화합니다. 자세한 내용은 ID 확인, 상태 관리 및 변경 내용 추적(Entity Framework)을 참조하십시오.

Entity Framework 에서는 개념적 모델 기반의 개체 계층을 자동으로 생성하는 도구를 제공합니다. 개체 계층에는 엔터티 형식과 개체 컨텍스트 정의가 포함됩니다. 개체 컨텍스트 정의에는 지정된 형식의 엔터티 컬렉션을 반환하는 속성 집합을 일반적으로 포함하는 ObjectContext 파생 클래스가 들어 있습니다. 개체 계층 코드를 생성하려면 Entity Data Model Designer(Entity Designer) 또는 EdmGen.exe 명령줄 도구를 사용합니다. 자세한 내용은 Generated Code Overview를 참조하십시오.

엔터티 형식

Entity Framework 에서는 EntityObject에서 파생된 엔터티 형식, POCO(Plain Old CLR Object) 형식, POCO 프록시 형식 및 자체 추적 엔터티 형식을 사용하여 작업할 수 있습니다. 다음 단원에서는 응용 프로그램의 특성에 따라 적절한 옵션을 결정하는 데 도움이 될 수 있는 정보를 제공합니다.

EntityObject

기본적으로 ADO.NET 엔터티 데이터 모델 도구는 EntityObject 파생 엔터티 형식을 생성합니다. EntityObject 파생 형식으로 작업하는 경우 개체 컨텍스트에서는 개체 간의 관계를 관리하고 변경이 발생할 때 변경 내용을 추적하며 가장 효율적인 방식으로 지연 로드를 지원합니다. 그러나 EntityObject 파생 형식은 Entity Framework 에 크게 의존합니다.. 테스트 기반 개발이나 도메인 기반 개발과 같이 지속성 무시가 필요한 아키텍처를 사용하여 작업하거나 기존 도메인 클래스가 있는 경우 POCO 또는 POCO 프록시를 사용하는 것이 좋습니다.

POCO

Entity Framework 를 사용하면 데이터 클래스를 수정하지 않고 데이터 모델과 함께 기존 도메인 개체를 사용할 수 있습니다. 이러한 POCO 데이터 클래스(지속성 무시 개체라고도 함)는 엔터티 데이터 모델 도구를 통해 생성된 엔터티 형식과 동일한 쿼리, 삽입, 업데이트 및 삭제 동작을 대부분 지원합니다.

POCO 형식으로 작업하는 경우 개체 그래프가 변경되면 해당 변경 내용이 Entity Framework 에서 자동으로 추적되지 않습니다. Entity Framework 에서는 스냅숏 메커니즘을 사용하여 개체의 변경 내용을 검색합니다. DetectChanges를 호출하여 개체 컨텍스트를 그래프와 동기화할 수 있습니다. 기본적으로 개체 컨텍스트에서는 데이터를 데이터 소스에 저장하기 전에 이 메서드를 호출합니다. 이 메커니즘에서는 즉각적인 알림 메커니즘보다 메모리를 많이 사용하며 특히 응용 프로그램에서 변경 내용을 자주 검색해야 하는 경우 성능에 영향을 미칠 수 있습니다. 자세한 내용은 POCO 엔터티에서 변경 내용 추적(Entity Framework)을 참조하십시오. 즉각적인 알림 지원을 사용하려면 변경 내용 추적 프록시 개체를 만들 수 있도록 설정합니다.

지연 로드를 이용하려면 지연 로드 프록시를 만들 수 있도록 설정해야 합니다. 자세한 내용은 아래의 POCO 프록시 단원을 참조하십시오.

POCO 프록시

매우 효율적이고 즉각적인 변경 내용 추적과 지연 로드를 원하는 경우 POCO 프록시를 사용합니다. 프록시를 사용하는 경우 EntityObject 파생 형식과 동일한 기능을 사용할 수 있지만 도메인 클래스가 Entity Framework 와 계속 분리되어 있습니다. 지연 로드 프록시 및/또는 즉각적인 변경 내용 추적 프록시를 만들 수 있도록 설정하려면 POCO 클래스는 POCO 프록시를 만들기 위한 요구 사항(Entity Framework) 항목에서 설명하는 요구 사항을 충족해야 합니다.

프록시는 런타임 중에 만들어지며 POCO 형식에서 상속합니다. 즉, 엔터티의 런타임 형식은 POCO 형식과 다릅니다. 이에 따라 serialization과 관련하여 문제가 발생합니다. 자세한 내용은 POCO 엔터티 사용(Entity Framework)을 참조하십시오. POCO 형식과 비교할 때 프록시 형식을 만드는 데는 오버헤드가 있습니다.

자동 추적 엔터티

EntityObject 파생 형식, POCO 및 POCO 프록시 형식은 변경 내용 추적을 처리하는 개체 컨텍스트에 엔터티 개체가 연결될 수 있는 응용 프로그램에서 효과적으로 작동합니다. 그러나 개체 컨텍스트를 사용할 수 없는 계층에 엔터티의 전체 그래프를 전송해야 하는 경우에는 변경 내용을 추적하고 해당 변경 내용을 개체 컨텍스트에 보고하는 방법을 결정해야 합니다. .NET Framework 버전 4부터 자동 추적 엔터티는 스칼라 속성, 복합 속성 및 탐색 속성에 대한 변경 내용을 기록할 수 있습니다. 자동 추적 엔터티는 Entity Framework 없이도 사용할 수 있습니다. ADO.NET 자동 추적 엔터티 생성기 템플릿은 자동 추적 엔터티를 생성합니다. 자세한 내용은 자동 추적 엔터티 작업을 참조하십시오.

성능 고려 사항

다음과 같은 성능 고려 사항이 응용 프로그램에 가장 적합한 개체의 형식을 선택하는 데 도움이 될 수도 있습니다.

  • 메타데이터를 로드할 때 POCO 또는 프록시 형식을 검색하는 비용이 특성이 지정된 EntityObject 파생 형식을 검색하는 것보다 큽니다.

  • 동적 POCO 프록시 형식을 생성할 때 오버헤드가 어느 정도 있습니다.

  • 프록시 및 EntityObject 파생 형식과 비교할 때 POCO 형식 초기화에는 최소한의 오버헤드가 있습니다.

  • POCO 스냅숏 추적은 즉각적인 알림 추적보다 비용이 많이 듭니다.

단원 내용

복합 형식 개체(Entity Framework)

관계 정의 및 관리(Entity Framework)

개체 만들기, 추가, 수정 및 삭제(Entity Framework)

개체 연결 및 분리(Entity Framework)

ID 확인, 상태 관리 및 변경 내용 추적(Entity Framework)

연결 및 트랜잭션 관리(Entity Framework)

변경 내용 저장 및 동시성 관리(Entity Framework)

컨트롤에 개체 바인딩(Entity Framework)

엔터티 키 사용(Entity Framework)

개체 Serialize(Entity Framework)

ObjectSet 사용(Entity Framework)

개체 사용자 지정(Entity Framework)

참고 항목

개념

개념적 모델 쿼리(Entity Framework)
퀵 스타트(Entity Framework)