다음을 통해 공유


복합 형식

WCF RIA Services에서의 복합 형식 지원으로 단일(복합) 속성에 여러 엔터티 속성 집합을 캡슐화할 수 있습니다. 이러한 형식을 사용하면 엔터티에 관련 속성의 특정 하위 집합이 포함될 때 엔터티를 단순화할 수 있습니다. 복합 형식은 동일한 속성 하위 집합을 공유하는 다른 엔터티에서도 다시 사용할 수 있습니다. 복합 형식의 일반적인 예로는 주소 지정을 위해 필요한 엔터티 속성을 함께 수집하는 Address를 들 수 있습니다. 이러한 Address 형식의 속성 집합에는 StreetAddress, City, StateProvince, PostalCodeCountry 엔터티 속성 등이 포함될 수 있습니다. 이 복합 형식은 이 속성 집합을 공유하는 한 CustomerContact 엔터티에서 모두 사용할 수 있습니다. 사용자 지정 Address 형식은 한 번 정의한 후 다른 엔터티에서 엔터티 속성 자체로 사용할 수 있습니다.

복합 형식은 복합 형식이기도 한 속성을 포함할 수 있으므로 엔터티 형식 또는 다른 복합 엔터티에서 다양한 구조적 속성을 정의하기 위한 템플릿으로 사용됩니다. 복합 형식은 네임스페이스 내에서 고유한 이름을 지정해야 하며, 선택적으로 하나 이상의 속성의 형태로 데이터를 포함할 수 있습니다. 복합 형식은 엔터티가 없고 독립적으로 존재할 수 없으므로 엔터티 형식 또는 다른 복합 형식의 속성으로만 존재할 수 있습니다. 복합 형식은 원본 형식이므로 코드로 인스턴스화하고 사용할 수 있습니다. 그러나 엔터티 형식처럼 데이터베이스에 대해 직접 쿼리하거나 데이터베이스에 영구적으로 저장할 수 없습니다. 복합 형식은 또한 연결에 참여할 수 없다는 점에서 엔터티와 구분됩니다. 따라서 엔터티 형식을 기반으로 하는 탐색 속성은 복합 형식에서 정의할 수 없습니다.

WCF RIA Services V1.0 SP1에서는 비 엔터티 복합 형식에 대한 지원이 추가되었습니다. 특히 ComplexObject 기본 클래스에서 파생되는 복합 형식의 코드 생성을 위한 지원이 제공됩니다. 클라이언트 프록시 생성을 위한 지원은 RIA Services 의 엔터티에 대한 지원과 마찬가지로 다양한 지원이 제공됩니다. 심층 유효성 검사, 변경 추적, 편집 세션 및 복합 형식 매개 변수에 대한 지원과 같이 엔터티와 동일한 메타데이터 지원이 제공됩니다. 즉, 이제는 Address와 같은 사용자 지정 형식을 엔터티 속성은 물론 매개 변수나 도메인 서비스 메서드에 대한 반환 값으로 사용할 수 있습니다.

복합 형식 정의 및 표현

이 단원에서는 EDM(엔터티 데이터 모델) 디자이너를 사용하여 엔터티 형식의 엔터티 속성 집합을 복합 형식으로 캡슐화하는 방법에 대해 설명합니다. EDM(엔터티 데이터 모델)은 개념적 모델을 정의하기 위해 CSDL(개념 스키마 정의 언어)이라고 부르는 DSL(domain-specific language)을 사용합니다. 디자이너에서 숨겨진 CSDL로 작성된 복합 형식의 XML 표현을 검사합니다.

이 항목에서는 사용자가 연습: RIA Services 솔루션 만들기을 이미 수행했거나 그와 동등한 지식을 갖고 있고 기존 RIA Services 솔루션을 사용할 수 있다고 가정합니다.

디자이너를 사용하여 복합 형식 만들기

  1. 연습: RIA Services 솔루션 만들기를 진행하여 얻은 RIAServicesExample 솔루션을 열고 Entity Framework 디자이너에서 AdventureWorksModel.edmx 파일(기본값)을 엽니다.

  2. Address 엔터티에서 AddressLine1, AddressLine2, City, StateProvince, CountryRegionPostalCode 속성을 선택합니다.

  3. 그 중 하나를 마우스 오른쪽 단추로 클릭하고 새 복합 형식으로 리팩터링을 선택합니다. 그러면 모델 브라우저가 열리고 바로 전에 만든 ComplexType1이라는 복합 형식이 기본적으로 AdventureWorksModel.edmx의 ComplexTypes 폴더에 표시됩니다. 모델 브라우저에 지정된 이름은 실제로 새 ComplexProperty의 형식입니다. 이 새 복합 속성으로 캡슐화된 하위 속성이 이제 모델 브라우저에 표시됩니다.

  4. 모델 브라우저에서 ComplexType1을 선택하고 MailAddress로 변경합니다. 이 형식은 이제 Address 엔터티에서 ComplexProperty를 선택하고 속성 창에서 형식을 참조하여 확인할 수 있는 새 ComplexProperty의 형식입니다.

  5. 속성 창에서 새 MailAddress 형식의 이름을 MailAddress로 변경합니다. 이 새 이름은 이제 디자이너에도 표시됩니다.

  6. 디자이너에서 MailAddress를 선택하고 마우스 오른쪽 단추로 클릭한 후 테이블 매핑을 선택하여 매핑 정보 테이블에 액세스합니다. 이 테이블에는 속성이 데이터베이스의 테이블 열에 매핑된 방식이 표시됩니다.

복합 형식의 XML 표현

RIA Services 에서는 CSDL(개념 스키마 정의 언어)을 사용하여 데이터 모델을 지정합니다. CSDL은 데이터 기반 응용 프로그램의 개념적 모델을 구성하는 엔터티, 관계 및 함수를 설명하는 XML 기반 언어입니다. 새 MailAddress 형식의 사양은 XML의 CSDL 섹션에 있습니다.

여기에 액세스하려면 솔루션 탐색기에서 AdventureWorksModel.edmx를 선택하고, 마우스 오른쪽 단추를 클릭하여 연결 프로그램을 선택한 다음 XML(텍스트) 편집기를 선택합니다. Visual Studio 2010에서 이 XML 표현을 열려면 데이터 모델의 디자인 뷰를 닫아야 하므로 이를 승인하기 위해 를 선택합니다. <EntityType Name=”Address”> 요소 내에 새 MailAddress 속성이 지정되어 있는지 확인합니다.

<Property Name="MailAddress" Type="AdventureWorksLTModel.MailAddress" Nullable="false" />

MailAddress 속성은 연결이 정의된 섹션 아래의 고유 요소에 정의됩니다.

        <ComplexType Name="MailAddress">
          <Property Type="String" Name="AddressLine1" Nullable="false" MaxLength="60" FixedLength="false" Unicode="true" />
          <Property Type="String" Name="AddressLine2" MaxLength="60" FixedLength="false" Unicode="true" />
          <Property Type="String" Name="City" Nullable="false" MaxLength="30" FixedLength="false" Unicode="true" />
          <Property Type="String" Name="StateProvince" Nullable="false" MaxLength="50" FixedLength="false" Unicode="true" />
          <Property Type="String" Name="CountryRegion" Nullable="false" MaxLength="50" FixedLength="false" Unicode="true" />
          <Property Type="String" Name="PostalCode" Nullable="false" MaxLength="15" FixedLength="false" Unicode="true" />
        </ComplexType>

<EntityType> 요소에 있으므로 <ComplexType> 요소 내에는 <Key> 요소가 없습니다.

다른 엔터티에서 복합 형식 다시 사용

Manufacturer 엔터티 형식에 동일한 address 속성 집합이 포함되어 있으면 이를 MailAddress 복합 형식에 캡슐화할 수 있을 것입니다. 복합 형식을 만들 때와 같이 새 복합 형식으로 리팩터링을 사용한 다음 속성 창에서 형식과 이름을 변경합니다. 그러면 필드는 다시 해당 엔터티를 가리킵니다. 예를 들어 Address 엔터티의 MailAddress에 대한 City 필드는 Address.City에 매핑되며, 여기서 이 필드는 Manufacturer 엔터티 형식에 대한 Manufacturer.City에 매핑됩니다. 매핑 정보 테이블을 사용하여 속성이 다시 데이터베이스의 올바른 열에 매핑되는지 확인합니다.