生成されたコードのカスタマイズ
ここでは、WCF RIA サービス クライアントで生成されたコードをカスタマイズする方法について説明します。RIA サービス では、クライアント プロジェクト用に生成されたコードに追加する場合もありますが、生成されたコードを直接カスタマイズすることはできません。これは、次に中間層のコードをコンパイルしたときに変更が上書きされるためです。RIA サービス では、生成されたコードに部分メソッドが用意されており、このメソッドを個別のコード ファイルに実装して、クライアント層コードをカスタマイズすることができます。これらの部分メソッドは、生成されたコードにコードをアタッチするために使用できる "フック ポイント" です。メソッドは、対応する部分メソッドを作成したときにのみ呼び出されます。
生成されたコードをカスタマイズし、エンティティ クラスのプロパティに基づいて新しい値を計算する方法の詳細については、「方法: 計算されたプロパティをクライアントに追加する」を参照してください。
部分メソッド
WCF RIA サービス フレームワークでは、ドメイン コンテキスト クラスおよびエンティティ クラスの部分メソッドが生成されます。
ドメイン コンテキスト クラスには、次の部分メソッドが用意されています。
メンバー | 使用方法 |
---|---|
|
DomainContext オブジェクトがインスタンス化されるときに実行されます。 |
エンティティ クラスには、次の部分メソッドが用意されています。
メンバー | 使用方法 |
---|---|
|
エンティティ オブジェクトがインスタンス化されるときに実行されます。 |
|
初めてエンティティが読み込まれ、逆シリアル化されたとき、またはエンティティがサーバーから逆シリアル化されてもクライアント上に既に存在するときに実行されます。 |
|
検証後、値を設定する前に呼び出されます。 |
|
値が設定された直後、RaiseDataMemberChanged メソッドが呼び出される前に呼び出されます。 |
|
カスタム メソッドが呼び出された後、起動される前に呼び出されます。 |
|
カスタム メソッドが呼び出されて起動した後に呼び出されます。 |
部分メソッドの実装
部分メソッドを使用するには、カスタマイズ対象の生成されたクラスと同じ名前および名前空間を持つ部分クラスを追加します。自動生成されたクライアント コードはサーバー プロジェクト上のコードと同じ名前空間を使用するため、通常、部分クラスの名前空間の形式は projectname.Web
になります。その後、カスタム コードの実行時に実行されるメソッドを実装します。たとえば、ドメイン コンテキストを作成時に読み込むには、次のコードを追加します。
Imports System.ServiceModel.DomainServices.Client
Namespace Web
Partial Public Class EmployeeDomainContext
Inherits DomainContext
Private Sub OnCreated()
Me.Load(Me.GetEmployeesQuery())
End Sub
End Class
End Namespace
using System.ServiceModel.DomainServices.Client;
namespace RIAServiceExample.Web
{
public partial class EmployeeDomainContext : DomainContext
{
partial void OnCreated()
{
this.Load(this.GetEmployeesQuery());
}
}
}
部分メソッドで生成されたエンティティ クラスのプロパティを設定できます。たとえば、データベース内の Employee テーブルに CreatedBy
という名前のフィールドがある場合は、OnCreated()
の部分メソッドを実装することでプロパティの値を設定できます。エンティティの新しいクラスを作成したユーザーを追跡するには、次のコードを追加します。
Imports System.ServiceModel.DomainServices.Client
Namespace Web
Partial Public Class Employee
Inherits Entity
Private Sub OnCreated()
Me.CreatedBy = WebContext.Current.User.Name
End Sub
End Class
End Namespace
using System.ServiceModel.DomainServices.Client;
namespace RIAServiceExample.Web
{
public partial class Employee : Entity
{
partial void OnCreated()
{
this.CreatedBy = WebContext.Current.User.Name;
}
}
}