次の方法で共有


共有エンティティ

エンティティは、WCF RIA サービス アプリケーション内の複数のドメイン サービス間で共有することができます。ドメイン サービスが同じサーバー DLL 内に含まれている限り、同じエンティティ型には、各ドメイン サービスを通じてクライアントがアクセスできます。共有エンティティのサポートには、DomainService のそれぞれの型での異なる可能性のあるアソシエーションおよび名前付き更新メソッドに基づくコードの生成が含まれます。エンティティを共有する機能により、基になるデータ モデルへのエンティティのより単純なマッピングを通じて、大規模な RIA サービス アプリケーションのリファクタリングと構築が容易になります。

このような共有の必要性を説明するシナリオは一般的です。たとえば、従業員の個人情報と、人事の従業員データを共有する方法について考えてみます。Employee エンティティは従業員の個人情報 DomainService から公開できます。ここでは、従業員が各自の住所や電話番号などの個人情報を更新できます。同じ Employee 型は、人事の DomainService からも公開できます。ここでは、休暇の日付、給与支払いなどの人事情報に加えて、氏名、ID などの Employee エンティティの詳細も表示されます。別の例として、購入サービスとカタログ サービスの両方で使用される製品エンティティがあります。

エンティティの共有がサポートされるのは、単一のサーバー DLL 内のみです。任意の数のドメイン サービスが、DLL 境界内の同じエンティティ型を参照できます。ただし、複数のサーバー DLL 間での同じエンティティ型の共有はサポートされていません。サービス ドメイン間でエンティティを共有する手順については、「チュートリアル: 複数のドメイン サービス間でのエンティティの共有」を参照してください。

Important 注 :
共有エンティティのサポートは、WCF RIA サービス V1.0 SP1 で導入されたものであり、WCF RIA サービス V1.0 ではサポートされていません。

クライアント エンティティの構造化

複数のドメイン サービス間でのエンティティ型の共有が導入されたことにより、特定のエンティティ型を使用する各 DomainService は、クライアントでサーバー エンティティ プロパティが生成されるかどうかを指定できます。生成されたクライアント エンティティは、型を公開するサービスで使用されるエンティティ プロパティを含むマージされたビューになります。その結果、コード ジェネレーターはアプリケーション DLL 内で各ドメイン サービスにアクセスできるクライアントで、1 つのエンティティ型を作成します。クライアント エンティティの構造は、IncludeAttribute 属性および ExcludeAttribute 属性の使用によっても影響を受けます。IncludeAttribute を持つサーバー エンティティ プロパティは常にクライアントに反映されます。ExcludeAttribute を持つサーバー エンティティ プロパティがクライアントに反映されることはありません。

カスタム更新メソッドと共有エンティティ

[Update(UsingCustomMethod = true)] 属性が適用されたドメイン サービス内のカスタム更新メソッドは、クライアントのドメイン コンテキストに反映され、Customer エンティティは関連付けられたカスタム更新メソッドを含みます。ドメイン コンテキストはドメイン サービスと関係を持ちますが、エンティティを共有できないため、ユーザーはカスタム更新メソッドを呼び出すときに、使用するドメイン コンテキストを認識している必要があります。これには、Intellisense が役立ちます。

共有の制限

共有エンティティに関する 3 つの制限を考慮する必要があります。

  1. 既に説明したように、複数のサーバー DLL 間での同じエンティティ型の共有はまだサポートされていません。

  2. 継承階層では、階層の分岐を共有する場合、階層の同じレベルを共有する必要があります。

  3. 特定のエンティティ型を共有するすべての DomainService オブジェクトは、その型のメタデータの記述と一致している必要があります。つまり、サービスの任意のカスタム DomainServiceDescriptionProvider オブジェクトでは、型に対して同じメタデータを指定する必要があります。