Share via


개체 구체화(WCF Data Services)

서비스 참조 추가 대화 상자를 사용하여 .NET Framework 기반 클라이언트 응용 프로그램에서 Open Data Protocol(OData) 피드를 사용하는 경우 동일한 데이터 클래스가 피드에서 노출하는 데이터 모델의 각 엔터티 형식에 대해 생성됩니다. 자세한 내용은 데이터 서비스 클라이언트 라이브러리 생성(WCF Data Services)을 참조하십시오. 쿼리에서 반환되는 엔터티 데이터는 이러한 생성된 클라이언트 데이터 서비스 클래스 중 하나의 인스턴스로 구체화됩니다. 병합 옵션 및 추적된 개체의 ID 확인에 대한 자세한 내용은 데이터 서비스 컨텍스트 관리(WCF Data Services)를 참조하십시오. 

WCF Data Services 를 사용하면 도구에서 생성된 데이터 클래스를 사용하지 않고 고유한 클라이언트 데이터 서비스 클래스를 정의할 수도 있습니다. 이에 따라 POCO(Plain Old CLR Object) 데이터 클래스라고도 하는 고유 데이터 클래스를 사용할 수 있습니다. 이러한 유형의 사용자 지정 데이터 클래스를 사용하는 경우 DataServiceKeyAttribute 또는 DataServiceEntityAttribute를 사용하여 데이터 클래스에 특성을 지정하고 클라이언트의 해당 형식 이름이 데이터 서비스의 데이터 모델에 있는 형식 이름과 일치하도록 해야 합니다.

라이브러리는 쿼리 응답 메시지를 받은 후 OData 피드에서 반환된 데이터를 해당 쿼리 형식인 클라이언트 데이터 서비스 클래스의 인스턴스로 구체화합니다. 이러한 개체를 구체화하는 일반적인 프로세스는 다음과 같습니다.

  1. 클라이언트 라이브러리는 다음 중 한 가지 방법으로 응답 메시지 피드의 entry 요소에서 serialize된 형식을 읽고 올바른 형식의 새 인스턴스를 만들려고 시도합니다.

    • 피드에 선언된 형식의 이름이 DataServiceQuery의 형식 이름과 동일한 경우 이 형식의 새 인스턴스가 빈 생성자를 사용하여 만들어집니다.

    • 피드에 선언된 형식의 이름이 DataServiceQuery의 형식에서 파생된 형식의 이름과 동일한 경우 이 파생 형식의 새 인스턴스가 빈 생성자를 사용하여 만들어집니다.

    • 피드에 선언된 형식과 일치하는 DataServiceQuery의 형식이나 파생 형식을 찾을 수 없는 경우 쿼리된 형식의 새 인스턴스가 빈 생성자를 사용하여 만들어집니다.

    • ResolveType 속성이 설정된 경우 제공된 대리자가 호출되어 기본 이름 기반 형식 매핑을 재정의하고 Func에서 반환되는 형식의 새 인스턴스가 대신 만들어집니다. 이 대리자가 null 값을 반환하는 경우 쿼리된 형식의 새 인스턴스가 대신 만들어집니다. 상속 시나리오를 지원하려면 기본 이름 기반 형식 이름 매핑을 재정의해야 할 수 있습니다.

  2. 클라이언트 라이브러리는 엔터티의 ID 값인 entryid 요소에서 URI 값을 읽습니다. NoTrackingMergeOption 값을 사용하지 않는 경우 ID 값이 DataServiceContext에서 개체를 추적하는 데 사용됩니다. ID 값은 엔터티가 쿼리 응답에서 여러 번 반환되는 경우에도 한 엔터티 인스턴스만 만들어지도록 하는 데도 사용됩니다.

  3. 클라이언트 라이브러리는 피드 항목에서 속성을 읽고 새로 만들어진 개체에 대해 해당 속성을 설정합니다. ID 값이 동일한 개체가 이미 DataServiceContext에 있는 경우 DataServiceContextMergeOption 설정에 따라 속성이 설정됩니다. 해당 속성이 클라이언트 형식에 없는 경우 응답에 속성 값이 포함될 수도 있습니다. 이러한 경우 DataServiceContextIgnoreMissingProperties 속성 값에 따라 동작이 결정됩니다. 이 속성이 true로 설정되었으면 없는 속성이 무시되고, 그렇지 않으면 오류가 발생합니다. 속성은 다음과 같이 설정됩니다.

    • 스칼라 속성은 응답 메시지의 항목에 있는 해당 값으로 설정됩니다.

    • 복합 속성은 응답에 있는 복합 형식의 속성을 사용하여 설정된 새로운 복합 형식 인스턴스로 설정됩니다.

    • 관련 엔터티의 컬렉션을 반환하는 탐색 속성은 ICollection의 새 인스턴스나 기존 인스턴스로 설정됩니다. 여기서 T는 관련 엔터티의 형식입니다. 이 컬렉션은 관련 개체가 DataServiceContext로 로드되지 않은 경우 비어 있습니다. 자세한 내용은 지연된 콘텐츠 로드(WCF Data Services)를 참조하십시오.

      Ee473428.note(ko-kr,VS.100).gif참고:
      생성된 클라이언트 데이터 클래스가 데이터 바인딩을 지원하는 경우 탐색 속성은 DataServiceCollection 클래스의 인스턴스를 대신 반환합니다. 자세한 내용은 컨트롤에 데이터 바인딩(WCF Data Services)을 참조하십시오.

  4. ReadingEntity 이벤트가 발생합니다.

  5. 클라이언트 라이브러리는 개체를 DataServiceContext에 연결합니다. MergeOptionNoTracking인 경우에는 개체가 연결되지 않습니다.

참고 항목

개념

데이터 서비스 쿼리(WCF Data Services)
쿼리 프로젝션(WCF Data Services)