自訂產生的程式碼
本主題將說明如何自訂 WCF RIA Services 用戶端上產生程式碼。就 RIA Services 來說,在某些情況下,您會想要將這種程式碼加入至為用戶端專案產生的程式碼。不過,您無法直接自訂產生的程式碼,因為下次編譯中介層程式碼時您的變更就會被覆寫。 在產生的程式碼中提供一些部分方法,可用來在個別程式碼檔中實作以自訂用戶端層程式碼。這些部分方法為「攔截點」,可用來將程式碼附加至產生的程式碼。只有在已建立對應的部分方法,才會呼叫這些部分方法。
如需自訂產生的程式碼來依據實體類別的屬性計算新值的詳細資訊,請參閱 HOW TO:在用戶端上加上計算屬性。
部分方法
WCF RIA Services 架構會為網域內容類別和實體類別產生部分方法。
針對網域內容類別,提供下列部分方法。
成員 | 用法 |
---|---|
|
在具現化 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;
}
}
}