다음을 통해 공유


ComplexObject 클래스

모든 복합 개체의 기본 클래스입니다.

네임스페이스: System.ServiceModel.DomainServices.Client
어셈블리: system.servicemodel.domainservices.client.dll의 System.ServiceModel.DomainServices.Client

사용법

‘사용 방법
Dim instance As ComplexObject

구문

‘선언
<DataContractAttribute> _
Public MustInherit Class ComplexObject
    Implements INotifyPropertyChanged, IEditableObject, INotifyDataErrorInfo
[DataContractAttribute] 
public abstract class ComplexObject : INotifyPropertyChanged, IEditableObject, INotifyDataErrorInfo
[DataContractAttribute] 
public ref class ComplexObject abstract : INotifyPropertyChanged, IEditableObject, INotifyDataErrorInfo
/** @attribute DataContractAttribute() */ 
public abstract class ComplexObject implements INotifyPropertyChanged, IEditableObject, 
    INotifyDataErrorInfo
DataContractAttribute 
public abstract class ComplexObject implements INotifyPropertyChanged, IEditableObject, 
    INotifyDataErrorInfo

설명

WCF RIA Services의 복합 개체 형식은 기본 형식처럼 사용할 수 있는 구조적 사용자 지정 사용자 형식입니다. 프레임워크는 복합 형식에 대한 리치 클라이언트 코드 생성과 같은 다양한 유사 엔터티 기능을 제공하며 복합 형식의 프레임워크 동작의 대부분은 엔터티의 프레임워크 동작과 같거나 거의 유사합니다. 그러나 EntityComplexObject와 중요한 차이점이 있습니다. 특히 복합 형식은 ID가 없습니다. 즉 KeyAttribute로 표시된 멤버가 없어 클라이언트는 엔터티에 하는 것과 같이 ID 캐싱을 할 수 없습니다. 복합 형식은 여러 부모 인스턴스에서 공유되거나 참조될 수 없고 상속을 지원하지 않습니다.

Address 형식의 멤버가 있는 엔터티 형식 Customer가 있다고 가정합니다.

public class Address
{
    public string AddressLine1 { get;set }
    public string City { get;set }
    public string Region { get;set }
    public string PostalCode { get;set }
    public string Country { get;set }
}

public class Customer
{
    [Key]
    public string CustomerID { get;set; }
    public string CompanyName { get;set }
    public string ContactName { get;set }

    public Address HomeAddress { get;set; }
}

이러한 형식은 생성된 해당 클라이언트 형식의 결과입니다.

public class Address : ComplexObject
{
    public string AddressLine1 { . . . }
    public string City { . . . }
    public string Region { . . . }
    public string PostalCode { . . . }
    public string Country { . . . }
}

public class Customer : Entity
{
    [Key]
    public string CustomerID { . . . }
    public string CompanyName { . . . }
    public string ContactName { . . . }

    public Address HomeAddress { . . . }
}

AddressComplexObject에서 파생됩니다.

코드 생성

복합 형식에 대해 생성된 클라이언트 프록시는 엔터티에 대해 생성된 클라이언트 프록시와 매우 유사합니다. 여기에는 부분 확장성 메서드, 유효성 검사 메타데이터 등이 포함됩니다. 코드 생성 복합 형식은 ComplexObject 기본 클래스에서 파생됩니다. 복합 형식의 생성된 속성 setter 논리 멤버 및 복합 형식의 멤버는 엔터티에 사용된 동일한 속성 패턴을 따릅니다.

메타데이터

엔터티와 마찬가지로, 버디 클래스를 통해 서버에서 추가 메타데이터를 복합 형식에 적용할 수 있으며 이 메타데이터는 시스템을 통해 전달됩니다. 마찬가지로 복합 형식을 지원하는 DAL(데이터 액세스 계층)을 사용하는 경우 DAL 메타데이터도 적용됩니다(예: 엔터티 프레임워크 모델 기반의 멤버에 대한 StringLengthAttribute 유추). 복합 형식은 엔터티와 같은 방식으로 메타데이터 파이프라인에 참여합니다.

유효성 검사

복합 형식 멤버에 대한 속성 setter 유효성 검사는 엔터티 멤버에 대한 해당 유효성 검사와 같은 방식으로 수행됩니다. 또한 중첩된 복합 형식 멤버에 대한 유효성 검사 오류는 포함 계층 구조까지 전파됩니다. 전체 전송 시간 유효성 검사가 엔터티 복합 형식 멤버의 모든 계층에서 수행되며 모든 경우에서 중첩된 유효성 검사 오류는 계층 구조 위쪽의 각 부모에 오류로 보고됩니다. 예를 들어 Customer.ContactInfo.HomeAddress.PostalCode 멤버가 잘못된 경우 이 유효성 검사 오류는 Customer, ContactInfoHomeAddress 인스턴스의 유효성 검사 오류로 나타납니다. ValidationResult의 멤버 이름은 각 수준의 적절한 경로로 지정됩니다.

변경 내용 추적

Customer.Address와 같은 Singleton 엔터티 복합 형식 멤버는 변경 추적 및 Accept/RejectChanges 파이프라인의 나머지 부분에 완전히 참여합니다. 중첩된 복합 형식 멤버가 변경되면 이러한 변경 사항은 계층적으로 부모 엔터티를 변경시키는 제약으로 보고됩니다. 엔터티의 변경 사항이 거부될 경우 모든 중첩된 복합 형식의 변경 사항은 이전 상태로 되돌아 갑니다. 개념적으로 중첩된 복합 형식 멤버는 시스템에서 복합 형식이 아닌 최상위 엔터티 속성과 동일한 방식으로 취급됩니다.

Customer.PhoneNumbers와 같은 컬렉션 멤버의 복합 형식은 완전히 추적되지 않습니다. 컬렉션 멤버의 복합 형식은 전송 시간에 전체 유효성 검사되지만 컬렉션의 복합 형식 인스턴스에 멤버가 설정되어 있으면 엔터티에서 유효성 검사 오류를 발생시키지 않으며, 부모 엔터티는 컬렉션의 인스턴스가 변경, 추가 또는 제거되었는지 여부를 추적하지 않습니다. 복합 형식 컬렉션 멤버의 콘텐츠를 수정하려면 새 컬렉션 인스턴스가 멤버에 할당되어야 합니다.

세션 편집

엔터티 복합 형식 멤버는 IEditableObject 인터페이스를 통해 시작된 엔터티 편집 세션에 완전히 참여합니다. BeginEdit가 엔터티에서 수행되는 경우 엔터티의 상태 스냅숏은 모든 중첩된 복합 형식 상태를 재귀적으로 포함합니다. 마찬가지로 CancelEdit/EndEdit가 수행되는 경우 변경 사항이 재귀적으로 적용됩니다. ComplexObject 자체가 IEditableObject를 구현하므로 엔터티에서 호스팅하지 않는 복합 형식을 지원하는 전체 편집 세션을 가져올 수 있습니다.

Serialization

복합 형식 멤버는 항상 DataContract/DataMember 주석을 기반으로 전체 serialize됩니다. 이는 IncludeAttribute의 응용 프로그램에서 제어되는 엔터티 연결의 serialization과는 대조적입니다.

상속 계층

System.Object
  System.ServiceModel.DomainServices.Client.ComplexObject

스레드 보안

이 형식의 모든 public static(Visual Basic의 경우 Shared) 멤버는 스레드로부터 안전합니다. 모든 인스턴스 멤버는 스레드로부터 안전하지 않을 수 있습니다.

플랫폼

개발 플랫폼

Windows XP Home Edition, Windows XP Professional, Windows Server 2003 , Windows Server 2008 및 Windows 2000

대상 플랫폼

Change History

참고 항목

참조

ComplexObject 멤버
System.ServiceModel.DomainServices.Client 네임스페이스