Share via


建立 POCO Proxy 的需求 (Entity Framework)

Entity Framework 支援 POCO 類別 (「單純」(plain-old) CLR 物件)。 如果您想要為 POCO 實體啟用消極式載入,並讓 Entity Framework 在類別中發生變更時追蹤變更,您的 POCO 類別必須符合本主題中所描述的需求,如此 Entity Framework 才能在執行階段為您的 POCO 實體建立 Proxy。 Proxy 類別衍生自您的 POCO 型別。

類別定義需求

如果類別符合以下所述的需求,Entity Framework 會建立 POCO 實體的 Proxy。 POCO 實體可以擁有支援變更追蹤或消極式載入的 Proxy 物件。 您可以擁有不符合變更追蹤 Proxy 之需求的消極式載入 Proxy,但是如果您符合變更追蹤 Proxy 需求,則會同時建立消極式載入 Proxy。 您可以將 LazyLoadingEnabled 選項設定為 false,藉以停用消極式載入。

針對要建立的這些任一 Proxy:

  • 自訂資料類別必須使用公用存取宣告。

  • 自訂資料類別不得為 sealed (在 Visual Basic 中為 NotInheritable)

  • 自訂資料類別不得為 abstract (在 Visual Basic 中為 MustInherit)

  • 自訂資料類別必須具有沒有任何參數的 publicprotected 建構函式。 如果您想要使用 CreateObject 方法為 POCO 實體建立 Proxy,請使用沒有參數的 protected 建構函式。 呼叫 CreateObject 方法不保證會建立 Proxy:POCO 類別必須遵循本主題中所描述的其他需求。

  • 類別無法實作 IEntityWithChangeTrackerIEntityWithRelationships 介面,因為 Proxy 類別會實作這些介面。

  • ProxyCreationEnabled 選項必須設定為 true

針對消極式載入 Proxy:

  • 每個導覽屬性必須宣告為 publicvirtual (在 Visual Basic 中為 Overridable),而非 sealed (在 Visual Basic 中為 NotOverridable) get 存取子。 自訂資料類別中定義的導覽屬性在概念模型中必須擁有對應的導覽屬性。 如需詳細資訊,請參閱載入相關的 POCO 實體 (Entity Framework)

針對變更追蹤 Proxy:

  • 每個對應至資料模型中之實體類型屬性的屬性必須擁有非 sealed (在 Visual Basic 中為 NotOverridable)、publicvirtual (在 Visual Basic 中為 Overridable) get 和 set 存取子。

  • 代表關聯性中的「多」端的導覽屬性必須傳回會實作 ICollection 的型別,其中 T 指關聯性另一端上的物件型別。

  • 如果您希望 Proxy 型別連同您的物件一起建立,在建立新物件時請使用 ObjectContext 上的 CreateObject 方法,而非 new 運算子。

如果在執行階段期間您必須知道 POCO 實體是否為 Proxy,請依照 HOW TO:識別本身為 Proxy 的 POCO 實體 (Entity Framework) 中所描述的步驟執行。

另請參閱

工作

逐步解說:使用 WCF 序列化 POCO Proxy (Entity Framework)

概念

使用 POCO 實體 (Entity Framework)
追蹤 POCO 實體中的變更 (Entity Framework)