自訂物件 (Entity Framework)
ADO.NET 實體架構 提供了一些工具來根據 實體資料模型 (EDM) 的概念結構定義語言 (CSDL) 檔案自動產生物件層。這些資料類別可自訂為各種不同的程度 (視應用程式的需求而定)。您也可以修改您自己的自訂資料類別,將它們使用於 EDM。當您從現有的應用程式升級資料類別來使用 實體架構,或是當您對於建立資料類別的方式想要有更大的控制權時,這種處理方式會很實用。
擴充部分資料類別
EDM 中定義的型別並不像物件導向程式設計中使用的類別一樣具有關聯的方法。這些型別只包含 EDM 中所定義的屬性。您可以擴充產生的部分資料類別,以便在物件中加入功能。當資料類別是由 實體資料模型 工具所產生時,會在部分類別中實作資料類別。部分類別會將類別的定義分割成兩個或多個原始程式檔,每一個原始程式檔都包含類別定義的一個區段,而當編譯應用程式時,就會將所有區段結合起來。如需詳細資訊,請參閱Partial (Visual Basic) 或partial (型別) (C# 參考)。
具有部分類別可讓您使用個別原始程式檔中的自訂方法和屬性來擴充這些類別,而不需要擔心會在重新整理產生的檔案時遺失您的自訂內容。如需詳細資訊,請參閱 HOW TO:自訂產生的資料物件 (Entity Framework)。
自訂商務邏輯
當使用產生的資料類別時,您可以在某些物件服務作業期間叫用自訂商務邏輯,例如屬性或關聯性的變更。此商務邏輯可包含其他驗證的建立或是記錄何時變更屬性或呼叫 SaveChanges。您可以叫用自訂商務邏輯,其方式是處理物件服務所引發的事件,或是定義自訂部分方法,以便在屬性變更時呼叫這些方法。
下列是用來叫用自訂商務邏輯的事件和方法:
- On屬性Changing 和 On屬性Changed 部分方法
當屬性變更時,產生之資料類別上的一對部分方法 (物件服務會呼叫這些資料類別)。請擴充部分資料類別中的這些方法,以便實作屬性變更時所要執行的程式碼。如需詳細資訊,請參閱 HOW TO:在屬性變更期間執行商務邏輯 (Entity Framework)。
- SavingChanges 事件
當物件內容中快取的變更即將要儲存到資料來源時,所引發的事件。在 SaveChanges 作業開始時處理這個事件來實作自訂商務邏輯。如需詳細資訊,請參閱 HOW TO:在儲存變更時執行商務邏輯 (Entity Framework)。
- OnContextCreated 方法
Entity Data Model 工具會在代表此模型的 EntityContainer 和繼承自 ObjectContext 類別的類別中產生 OnContextCreated 部分方法。每當 ObjectContext 具現化的時候,就會呼叫這個部分方法。請在您的程式碼中實作這個部分方法以登錄 SavingChanges 事件的處理常式。如需詳細資訊,請參閱 HOW TO:在儲存變更時執行商務邏輯 (Entity Framework)。
- AssociationChanged 事件
當兩個物件之間的關聯性變更時,所引發的事件。當關聯性變更時,處理這個事件來實作自訂商務邏輯。如需詳細資訊,請參閱 HOW TO:變更物件之間的關聯性 (Entity Framework)。
自訂資料類別
在一些情況下,只是藉由加入方法和屬性來擴充部分類別可能無法提供足夠的彈性。假設目前有一個 .NET Framework 應用程式,它使用 ADO.NET 將資料庫中的資料載入 CLR 物件供應用程式使用。這些物件可能包含了必須保存在物件層中的寶貴自訂內容和商務邏輯。這些自訂內容可能會阻礙您將應用程式移轉成使用 實體架構。您可能也會想要對實體類型有更大的控制權,而不僅是擴充產生的部分類別。
搭配 EDM 使用自訂資料類別的建議方式是從 EntityObject 繼承。如果您無法從 EntityObject 繼承,或者不想受到太多架構的限制,Entity Framework 提供了一組可以實作介面,讓您搭配 EDM 使用自訂資料類別。如需詳細資訊,請參閱實作自訂資料類別介面 (Entity Framework)。當您使用自訂資料類別時,您必須將屬性 (Attribute) 套用到自訂資料類別和屬性 (Property),並通知物件內容何時變更屬性 (Property)。
繼承自 EntityObject
產生的資料類別繼承自 EntityObject 或 ComplexObject。如果您必須搭配 EDM 使用自訂資料類別,建議的方法是修改您的資料類別,以便從其中一個基底類別 (Base Class) 繼承。如此一來,自訂資料類別就會因為 EntityObject 所提供的變更追蹤和關聯性管理功能而獲益。
當您繼承自 EntityObject 和 ComplexObject 時,請注意以下幾個要點:
類別和屬性名稱必須符合 EDM 之概念結構定義語言 (CSDL) 檔案中所定義的實體類型和屬性名稱。如果名稱不相符,您必須變更資料類別和屬性的名稱,或是更新 CSDL 與對應規格語言 (MSL) 檔案中的名稱。如需詳細資訊,請參閱 HOW TO:自訂 Entity Data Model 以搭配自訂物件運作 (Entity Framework)。
對於 CSDL 中定義之實體類型的每一個屬性而言,自訂資料類別中一定要有一個關聯屬性。自訂資料類別可以有未對應到 CSDL 中定義之屬性的其他屬性。
您必須將屬性 (Attribute) 套用到自訂資料類別和屬性 (Property)。這些屬性提供了物件與 CSDL 之間的明確對應。如需詳細資訊,請參閱 對應屬性 (Entity Framework) 及 HOW TO:將自訂物件對應到實體 (Entity Framework)。
若要讓物件服務追蹤自訂物件的變更,您必須使用 EntityObject 變更報告方法,在特定模式中變更這些變更。如需詳細資訊,請參閱報告自訂資料類別中的變更 (Entity Framework)。
Entity Framework 工具也會產生其他類別來簡化物件程式設計。配合自訂資料類別使用此程式碼有許多好處。如需詳細資訊,請參閱 HOW TO:以自訂物件使用物件服務 (Entity Framework)。
當您繼承自 EntityObject 時,必須從 ComplexObject 繼承來實作複雜類型。如需詳細資訊,請參閱複雜類型物件 (Entity Framework)。
下列範例會定義自訂資料類別 Order,該類別是繼承自 EntityObject:
<EdmEntityTypeAttribute(NamespaceName:="Microsoft.Samples.Edm", Name:="Order")> _
Public Class Order
Inherits EntityObject
[EdmEntityTypeAttribute(NamespaceName="Microsoft.Samples.Edm",Name="Order")]
public class Order : EntityObject
如需詳細資訊,請參閱 HOW TO:從 EntityObject 和 ComplexObject 基底類別繼承 (Entity Framework)。