共有エンティティ
エンティティは、WCF RIA サービス アプリケーション内の複数のドメイン サービス間で共有することができます。ドメイン サービスが同じサーバー DLL 内に含まれている限り、同じエンティティ型には、各ドメイン サービスを通じてクライアントがアクセスできます。共有エンティティのサポートには、DomainService のそれぞれの型での異なる可能性のあるアソシエーションおよび名前付き更新メソッドに基づくコードの生成が含まれます。エンティティを共有する機能により、基になるデータ モデルへのエンティティのより単純なマッピングを通じて、大規模な RIA サービス アプリケーションのリファクタリングと構築が容易になります。
このような共有の必要性を説明するシナリオは一般的です。たとえば、従業員の個人情報と、人事の従業員データを共有する方法について考えてみます。Employee エンティティは従業員の個人情報 DomainService から公開できます。ここでは、従業員が各自の住所や電話番号などの個人情報を更新できます。同じ Employee 型は、人事の DomainService からも公開できます。ここでは、休暇の日付、給与支払いなどの人事情報に加えて、氏名、ID などの Employee エンティティの詳細も表示されます。別の例として、購入サービスとカタログ サービスの両方で使用される製品エンティティがあります。
エンティティの共有がサポートされるのは、単一のサーバー DLL 内のみです。任意の数のドメイン サービスが、DLL 境界内の同じエンティティ型を参照できます。ただし、複数のサーバー DLL 間での同じエンティティ型の共有はサポートされていません。サービス ドメイン間でエンティティを共有する手順については、「チュートリアル: 複数のドメイン サービス間でのエンティティの共有」を参照してください。
注 : |
---|
共有エンティティのサポートは、WCF RIA サービス V1.0 SP1 で導入されたものであり、WCF RIA サービス V1.0 ではサポートされていません。 |
クライアント エンティティの構造化
複数のドメイン サービス間でのエンティティ型の共有が導入されたことにより、特定のエンティティ型を使用する各 DomainService は、クライアントでサーバー エンティティ プロパティが生成されるかどうかを指定できます。生成されたクライアント エンティティは、型を公開するサービスで使用されるエンティティ プロパティを含むマージされたビューになります。その結果、コード ジェネレーターはアプリケーション DLL 内で各ドメイン サービスにアクセスできるクライアントで、1 つのエンティティ型を作成します。クライアント エンティティの構造は、IncludeAttribute 属性および ExcludeAttribute 属性の使用によっても影響を受けます。IncludeAttribute を持つサーバー エンティティ プロパティは常にクライアントに反映されます。ExcludeAttribute を持つサーバー エンティティ プロパティがクライアントに反映されることはありません。
カスタム更新メソッドと共有エンティティ
[Update(UsingCustomMethod = true)]
属性が適用されたドメイン サービス内のカスタム更新メソッドは、クライアントのドメイン コンテキストに反映され、Customer エンティティは関連付けられたカスタム更新メソッドを含みます。ドメイン コンテキストはドメイン サービスと関係を持ちますが、エンティティを共有できないため、ユーザーはカスタム更新メソッドを呼び出すときに、使用するドメイン コンテキストを認識している必要があります。これには、Intellisense が役立ちます。
共有の制限
共有エンティティに関する 3 つの制限を考慮する必要があります。
既に説明したように、複数のサーバー DLL 間での同じエンティティ型の共有はまだサポートされていません。
継承階層では、階層の分岐を共有する場合、階層の同じレベルを共有する必要があります。
特定のエンティティ型を共有するすべての DomainService オブジェクトは、その型のメタデータの記述と一致している必要があります。つまり、サービスの任意のカスタム DomainServiceDescriptionProvider オブジェクトでは、型に対して同じメタデータを指定する必要があります。