次の方法で共有


ComplexObject クラス

すべての複合オブジェクトの基本クラスです。

名前空間: System.ServiceModel.DomainServices.Client
アセンブリ: System.ServiceModel.DomainServices.Client (system.servicemodel.domainservices.client.dll 内)

使用方法

'使用
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 サービス の複合オブジェクトの型は、基本データ型のように使用できる構造的なカスタム ユーザー タイプです。このフレームワークには、複合型に対する機能豊富なクライアント コード生成など、エンティティと同様の機能が多数用意されており、複合型に対するフレームワーク動作の多くは、エンティティの場合と同じか非常に似ています。ただし、ComplexObject は、重要な点で Entity と異なります。特に重要な違いとして、複合型には ID がありません。つまり、複合型には KeyAttribute でマークされたメンバーが存在しないため、クライアントでエンティティのキャッシュは識別しますが、複合型のキャッシュは識別できません。複合型は共有したり、複数の親インスタンスから参照したりすることができず、継承をサポートしません。

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 メタデータも適用されます (Entity Framework モデルに基づくメンバーの StringLengthAttribute の推論など)。複合型は、エンティティと同じ方法でメタデータ パイプラインに参加します。

検証

複合型のメンバーに対するプロパティ setter の検証は、エンティティ メンバーに対する場合と同様の方法で実行されます。また、入れ子になった複合型のメンバーの検証エラーは、包含階層の上位に伝達されます。エンティティの複合型のメンバーの両方の層で、送信時間の詳細な検証が実行されます。入れ子になった検証エラーは、常にそれぞれの親で発生したエラーとして上位階層に報告されます。たとえば、Customer.ContactInfo.HomeAddress.PostalCode メンバーが無効の場合、その検証エラーは Customer インスタンス、ContactInfo インスタンス、および HomeAddress インスタンスの検証エラーに出現します。ValidationResult に格納されるメンバー名には、各レベルで適切にパスが指定されます。

変更の追跡

単一エンティティの複合型のメンバー (Customer.Address など) は、変更の追跡と残りの Accept/RejectChanges パイプラインに完全に参加します。入れ子になった複合型のメンバーが変更されると、それらの変更は包含階層の上位に報告されます。これにより、親エンティティがダーティになります。エンティティで変更が拒否されると、入れ子になった複合型のすべての変更が元に戻されます。概念上、入れ子になった複合型のメンバーは、トップ レベルの非複合型エンティティのプロパティと同様にシステムによって処理されます。

コレクション メンバーの複合型 (Customer.PhoneNumbers など) は、詳しく追跡されません。このような複合型は送信時に詳しく検証されますが、コレクション内の複合型のインスタンスでメンバーが設定されるときに、エンティティで検証エラーは発生しません。また、コレクション内のインスタンスが変更、追加、または削除されても、親エンティティは追跡されません。複合型コレクション メンバーのコンテンツを変更するには、メンバーに新しいコレクション インスタンスを割り当てる必要があります。

編集セッション

エンティティの複合型のメンバーは、IEditableObject インターフェイスによって開始されるエンティティの編集セッションに完全に参加します。エンティティで BeginEdit を実行する場合、エンティティの状態スナップショットには、入れ子になった複合型のすべての状態が再帰的に含まれます。同様に、CancelEdit または EndEdit を実行する場合、変更は再帰的に適用されます。ComplexObject 自体が IEditableObject を実装するため、エンティティでホストされない複合型に対して編集セッションが完全にサポートされます。

シリアル化

複合型のメンバーは、常に DataContract または DataMember の注釈に基づいて詳しくシリアル化されます。これは、エンティティの関連付けと対照的です。エンティティの関連付けは、IncludeAttribute の適用によって決まります。

継承階層

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 名前空間