共用方式為


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

在 POCO (「單純」的 CLR 物件) 實體中追蹤變更有兩種方式:透過變更追蹤 Proxy 物件或透過快照。

使用 Proxy 追蹤變更

當 POCO 實體啟用變更追蹤 Proxy 物件的建立時,若對物件圖形進行變更,則 Entity Framework 會自動追蹤變更。 如需詳細資訊,請參閱建立 POCO Proxy 的需求 (Entity Framework)識別解析、狀態管理和變更追蹤。 如果在 POCO 類別中您無法符合額外的需求,或如果您不希望具體化這些 Proxy 物件,您可以停用 Proxy 類別產生。 如需詳細資訊,請參閱使用 POCO 實體 (Entity Framework)

使用快照追蹤變更

當停用 Proxy 物件建立時,若對物件圖形進行變更,Entity Framework 不會自動追蹤變更。 您必須改用 DetectChanges 方法來報告變更。

當物件附加至內容時,會擷取其屬性值的快照。 若已呼叫 DetectChanges 方法時,附加的物件圖形會與 ObjectStateManager 同步化。 如需如何附加物件的詳細資訊,請參閱附加及中斷連結物件DetectChanges 方法會透過執行下列動作,將物件圖形與狀態管理員同步化:

  1. 將圖形中的新物件附加至物件內容。 如果您查詢主體物件並建立與新相依物件的關聯,則這種情況可能會發生。

  2. 根據將目前的屬性值與原始值的快照加以比較來更新物件狀態 (如果已擷取快照的話)。

如需詳細資訊,請參閱 HOW TO:偵測 POCO 實體中的變更

Dd456848.note(zh-tw,VS.100).gif注意:
如果 POCO 實體包含複雜型別屬性,將會透過快照方法偵測複雜型別之執行個體成員的變更,即使實體具有變更追蹤 Proxy 也一樣。不過,如果複雜型別的新執行個體已指派給屬性,就會和其他屬性使用相同的方式來追蹤屬性的變更。

當物件和 ObjectStateManager 未同步化時,使用 ObjectStateManager 的其他作業 (例如,加入、附加或刪除物件;呼叫 Refresh 方法或甚至使用 PreserveChangesMergeOption 值執行查詢) 可能會有無法預期的結果。

因為讓 ObjectStateManager 與附加之 POCO 實體的任何值變更保持同步化相當重要,所以 SaveChanges 方法預設會先呼叫 DetectChanges 方法。 如果您對圖形進行變更並打算使用下列任一方法,則在呼叫 SaveChanges 之前,建議您先呼叫 DetectChanges

另請參閱

概念

使用 POCO 實體 (Entity Framework)