다음을 통해 공유


POCO 프록시를 만들기 위한 요구 사항(Entity Framework)

Entity Framework 는 POCO(Plain Old CLR Object) 클래스를 지원합니다. POCO 엔터티에 대해 지연 로드를 사용하고 Entity Framework 가 클래스에서 발생하는 변경 내용을 추적하도록 하려면 Entity Framework 가 런타임에 POCO 엔터티에 대한 프록시를 만들 수 있도록 POCO 클래스가 이 항목에 설명된 요구 사항을 충족해야 합니다. 프록시 클래스는 POCO 형식에서 파생됩니다.

클래스 정의 요구 사항

Entity Framework 는 클래스가 아래에 설명된 요구 사항을 충족하는 경우 POCO 엔터티에 대한 프록시를 만듭니다. POCO 엔터티에는 변경 내용 추적이나 지연 로드를 지원하는 프록시 개체가 있을 수 있습니다. 변경 내용 추적 프록시에 대한 요구 사항을 충족하지 않고 지연 로드 프록시를 사용할 수 있지만 변경 내용 추적 프록시 요구 사항을 충족하면 지연 로드 프록시도 만들어집니다. LazyLoadingEnabled 옵션을 false로 설정하여 지연 로드를 사용하지 않도록 설정할 수 있습니다.

이러한 프록시 중 하나가 만들어지려면

  • 사용자 지정 데이터 클래스가 공용 액세스를 사용하여 선언되어야 합니다.

  • 사용자 지정 데이터 클래스가 sealed(Visual Basic에서는 NotInheritable)가 아니어야 합니다.

  • 사용자 지정 데이터 클래스가 abstract(Visual Basic에서는 MustInherit)가 아니어야 합니다.

  • 사용자 지정 데이터 클래스에 매개 변수가 없는 public 또는 protected 생성자가 있어야 합니다. CreateObject 메서드가 POCO 엔터티에 대한 프록시를 만드는 데 사용되게 하려면 매개 변수 없이 protected 생성자를 사용합니다. CreateObject 메서드를 호출한다고 해서 프록시가 반드시 만들어지는 것은 아닙니다. POCO 클래스는 이 항목에 설명된 다른 요구 사항을 충족해야 합니다.

  • 프록시 클래스가 IEntityWithChangeTracker 또는 IEntityWithRelationships 인터페이스를 구현하기 때문에 클래스는 이러한 인터페이스를 구현할 수 없습니다.

  • ProxyCreationEnabled 옵션이 true로 설정되어야 합니다.

지연 로드 프록시의 경우

  • 각 탐색 속성이 public, virtual(Visual Basic에서는 Overridable) get 접근자로 선언되어야 하고 sealed(Visual Basic에서는 NotOverridable) get 접근자로 선언되지 않아야 합니다. 사용자 지정 데이터 클래스에 정의된 탐색 속성에 해당하는 탐색 속성이 개념적 모델에 있어야 합니다. 자세한 내용은 관련 POCO 엔터티 로드(Entity Framework)를 참조하십시오.

변경 내용 추적 프록시의 경우

  • 데이터 모델의 엔터티 형식 속성에 매핑되는 각 속성에 비 sealed(Visual Basic에서는 NotOverridable), publicvirtual(Visual Basic에서는 Overridable) get 및 set 접근자가 있어야 합니다.

  • 관계의 “다” 쪽을 나타내는 탐색 속성이 ICollection을 구현하는 형식을 반환해야 합니다. 여기서 T는 관계의 다른 쪽에 있는 개체의 형식입니다.

  • 프록시 형식이 개체와 함께 만들어지도록 하려면 새 개체를 만들 때 new 연산자 대신 ObjectContextCreateObject 메서드를 사용합니다.

런타임에 POCO 엔터티가 프록시인지 여부를 알아야 하는 경우 방법: POCO 엔터티가 프록시인지 식별(Entity Framework)에 설명된 단계를 수행합니다.

참고 항목

작업

연습: WCF를 사용하여 POCO 프록시 Serialize(Entity Framework)

개념

POCO 엔터티 사용(Entity Framework)
POCO 엔터티에서 변경 내용 추적(Entity Framework)