다음을 통해 공유


리플렉션 공급자(WCF Data Services)

WCF Data Services 는 Entity Framework를 통해 데이터 모델의 데이터를 노출할 뿐 아니라 엔터티 기반 모델에 엄격하게 정의되지 않은 데이터를 노출할 수 있습니다. 리플렉션 공급자는 IQueryable 인터페이스를 구현하는 형식을 반환하는 클래스의 데이터를 노출합니다. WCF Data Services 는 리플렉션을 사용하여 이러한 클래스의 데이터 모델을 유추하고 리소스에 대한 주소 기반 쿼리를 노출된 IQueryable 형식에 대한 LINQ(Language-Integrated Query) 기반 쿼리로 변환할 수 있습니다.

Dd723653.note(ko-kr,VS.100).gif참고:
IEnumerable 인터페이스를 구현하는 모든 클래스에서 AsQueryable 메서드를 사용하여 IQueryable 인터페이스를 반환할 수 있습니다.이렇게 하면 가장 일반적인 컬렉션 형식을 데이터 서비스의 데이터 소스로 사용할 수 있습니다.

리플렉션 공급자는 형식 계층 구조를 지원합니다. 자세한 내용은 방법: 리플렉션 공급자를 사용하여 데이터 서비스 만들기(WCF Data Services)를 참조하십시오.

데이터 모델 유추

데이터 서비스를 만들면 공급자가 리플렉션을 사용하여 데이터 모델을 유추합니다. 다음 목록에서는 리플렉션 공급자가 데이터 모델을 유추하는 방법을 보여 줍니다.

  • 엔터티 컨테이너 - IQueryable 인스턴스를 반환하는 속성으로 데이터를 노출하는 클래스입니다. 리플렉션 기반 데이터 모델의 주소를 지정할 때 엔터티 컨테이너는 서비스 루트를 나타냅니다. 지정된 네임스페이스에 대해 엔터티 컨테이너 클래스 하나만 지원됩니다.

  • 엔터티 집합 - IQueryable 인스턴스를 반환하는 속성은 엔터티 집합으로 처리됩니다. 엔터티 집합은 쿼리의 리소스로 직접 주소가 지정됩니다. 엔터티 컨테이너의 속성 하나만 지정된 형식의 IQueryable 인스턴스를 반환할 수 있습니다.

  • 엔터티 형식 - 엔터티 집합이 반환하는 IQueryableT 형식입니다. 상속 계층 구조에 속하는 클래스는 리플렉션 공급자에 의해 동등한 엔터티 형식 계층 구조로 변환됩니다.

  • 엔터티 키 - 엔터티 형식인 각 데이터 클래스에는 키 속성이 있어야 합니다. 이 속성은 DataServiceKeyAttribute 특성([DataServiceKeyAttribute])을 사용합니다.

    Dd723653.note(ko-kr,VS.100).gif참고:
    DataServiceKeyAttribute 특성은 엔터티 형식의 인스턴스를 고유하게 식별하는 데 사용할 수 있는 속성에만 적용해야 합니다.이 특성은 탐색 속성에 적용될 때 무시됩니다.

  • 엔터티 형식 속성 - 엔터티 키를 제외하고 리플렉션 공급자는 엔터티 형식인 클래스의 액세스 가능한 비인덱서 속성을 다음과 같이 처리합니다.

    • 기본 형식을 반환하는 속성은 엔터티 형식의 속성으로 간주됩니다.

    • 엔터티 형식이기도 한 형식을 반환하는 속성은 다대일 또는 일대일 관계의 "일" 쪽을 나타내는 탐색 속성으로 간주됩니다.

    • 엔터티 형식의 IEnumerable을 반환하는 속성은 일대다 또는 다대다 관계의 "다" 쪽을 나타내는 탐색 속성으로 간주됩니다.

    • 반환 형식이 값 형식인 속성은 복합 형식을 나타냅니다.

Dd723653.note(ko-kr,VS.100).gif참고:
엔터티 관계형 모델을 기반으로 하는 데이터 모델과 달리 리플렉션 공급자를 기반으로 하는 모델에서는 관계형 데이터가 인식되지 않습니다.Entity Framework를 사용하여 WCF Data Services 를 통해 관계형 데이터를 노출해야 합니다.

데이터 형식 매핑

.NET Framework 클래스에서 데이터 모델을 유추할 때 데이터 모델의 기본 형식은 다음과 같이 .NET Framework 데이터 형식에 매핑됩니다.

.NET Framework 데이터 형식 데이터 모델 형식

Byte []

Edm.Binary

Boolean

Edm.Boolean

Byte

Edm.Byte

DateTime

Edm.DateTime

Decimal

Edm.Decimal

Double

Edm.Double

Guid

Edm.Guid

Int16

Edm.Int16

Int32

Edm.Int32

Int64

Edm.Int64

SByte

Edm.SByte

Single

Edm.Single

String

Edm.String

Dd723653.note(ko-kr,VS.100).gif참고:
.NET Framework nullable 값 형식은 null이 할당될 수 없는 해당 값 형식과 동일한 데이터 모델 형식으로 매핑됩니다.

데이터 모델에서 업데이트 사용

이러한 종류의 데이터 모델을 통해 노출되는 데이터를 업데이트하려면 리플렉션 공급자는 IUpdatable 인터페이스를 정의합니다. 이 인터페이스는 노출된 형식의 업데이트를 저장하는 방법을 데이터 서비스에 지시합니다. 데이터 모델에 의해 정의된 리소스를 업데이트하려면 엔터티 컨테이너 클래스에서 IUpdatable 인터페이스를 구현해야 합니다. IUpdatable 인터페이스의 구현 예제는 방법: LINQ to SQL 데이터 소스를 사용하여 데이터 서비스 만들기(WCF Data Services)를 참조하십시오.

IUpdatable 인터페이스를 사용하려면 리플렉션 공급자를 통해 업데이트를 데이터 소스로 전파할 수 있도록 다음 멤버를 구현해야 합니다.

멤버 설명

AddReferenceToCollection

탐색 속성에서 액세스되는 관련 개체의 컬렉션에 개체를 추가하는 기능을 제공합니다.

ClearChanges

보류 중인 데이터 변경 내용을 취소하는 기능을 제공합니다.

CreateResource

지정한 컨테이너에 새 리소스를 만드는 기능을 제공합니다.

DeleteResource

리소스를 삭제하는 기능을 제공합니다.

GetResource

특정 쿼리 및 형식 이름으로 식별되는 리소스를 검색하는 기능을 제공합니다.

GetValue

리소스의 속성 값을 반환하는 기능을 제공합니다.

RemoveReferenceFromCollection

탐색 속성에서 액세스되는 관련 개체의 컬렉션에서 개체를 제거하는 기능을 제공합니다.

ResetResource

지정한 리소스를 업데이트하는 기능을 제공합니다.

ResolveResource

특정 개체 인스턴스가 나타내는 리소스를 반환하는 기능을 제공합니다.

SaveChanges

보류 중인 변경 내용을 모두 저장하는 기능을 제공합니다.

SetReference

탐색 속성을 사용하여 관련 개체 참조를 설정하는 기능을 제공합니다.

SetValue

리소스의 속성 값을 설정하는 기능을 제공합니다.

동시성 처리

WCF Data Services 는 엔터티의 동시성 토큰을 정의할 수 있도록 하여 낙관적 동시성 모델을 지원합니다. 엔터티의 속성을 하나 이상 포함하는 이 동시성 토큰은 요청되거나 업데이트 또는 삭제되고 있는 데이터가 변경되었는지 여부를 데이터 서비스에서 확인하는 데 사용됩니다. 요청의 eTag에서 가져온 토큰 값이 엔터티의 현재 값과 다르면 데이터 서비스에서 예외가 발생합니다. 리플렉션 공급자에서 동시성 토큰을 정의하기 위해 ETagAttribute가 엔터티 형식에 적용됩니다. 동시성 토큰에는 키 속성이나 탐색 속성이 포함될 수 없습니다. 자세한 내용은 Making Changes to Data (WCF Data Services)을 참조하십시오.

리플렉션 공급자와 함께 LINQ to SQL 사용

Entity Framework는 기본적으로 지원되므로 WCF Data Services 에 관계형 데이터를 사용하는 경우 이 데이터 공급자를 사용하는 것이 좋습니다. 그러나 리플렉션 공급자를 통해 데이터 서비스에 LINQ to SQL 클래스를 사용할 수 있습니다. LINQ to SQL O/R Designer(Object Relational Designer)가 생성한 DataContext의 메서드에서 반환된 Table 결과 집합은 IQueryable 인터페이스를 구현합니다. 이렇게 하면 리플렉션 공급자가 이러한 메서드에 액세스하고 생성된 LINQ to SQL 클래스를 사용하여 SQL Server에서 엔터티 데이터를 반환할 수 있습니다. 그러나 LINQ to SQL은 IUpdatable 인터페이스를 구현하지 않으므로 기존 DataContext partial 클래스를 확장하여 IUpdatable 구현을 추가하는 partial 클래스를 추가해야 합니다. 자세한 내용은 방법: LINQ to SQL 데이터 소스를 사용하여 데이터 서비스 만들기(WCF Data Services)를 참조하십시오.

참고 항목

개념

데이터 서비스 공급자(WCF Data Services)