附加物件 (Entity Framework)

在 Entity Framework 中的物件內容內執行查詢時,傳回的物件會自動附加到物件內容。您也可以將物件附加到從查詢以外的來源取得的物件內容。您可以附加之前已中斷連結的物件、NoTracking 查詢之前傳回的物件,或是從物件內容外部取得的物件。您也可以附加在 ASP.NET 應用程式的檢視狀態中所儲存的物件,或是已經從遠端方法呼叫或 Web 服務傳回的物件。

使用下列其中一個方法可將該物件附加到物件內容:

下列考量適用於附加物件到物件內容時:

  • 如果附加的物件有相關物件,這些物件也會附加到物件內容。

  • 若要使用 Attach 來附加物件,此物件必須實作 IEntityWithKey 並且具有有效的索引鍵。

  • 物件會附加到 Unchanged 狀態下的物件內容。

  • 如果附加的物件不在資料來源中,SaveChanges 期間就不會將它加入。在此情況下對屬性進行變更時,會在 SaveChanges 期間於伺服器上發生例外狀況。若要加入物件,請使用 AddObject 來替代 Attach

  • 如果附加的物件與其他物件有關,您必須使用下列一種方法來明確定義關聯性:

    • 將這兩個物件附加到物件內容,然後在 EntityCollectionEntityReference 上呼叫 Attach 來定義關聯性。

    • 如果兩個方法都未附加,請在 EntityCollection 上呼叫 Add,並指定相關物件,或是將 EntityReferenceValue 屬性設定為相關物件。接下來,請將物件圖形的根附加到物件內容。您可以使用這個方法,從中斷連結的物件建構物件圖形,然後將此圖形附加到物件內容。

    附加使用 XML 序列化所序列化的相關物件時會使用這些方法。如需詳細資訊,請參閱 HOW TO:附加相關的物件 (Entity Framework)

  • 如果附加的物件具有更新的屬性值,請使用 ApplyPropertyChanges 將更新套用到現有的物件。如需詳細資訊,請參閱 HOW TO:套用對中斷連結的物件所做的變更 (Entity Framework)

  • 傳遞給 Attach 方法的物件必須具有有效的 EntityKey 值。如果此物件的 EntityKey 值無效,請使用 AttachTo 方法來指定實體集的名稱。

  • 當附加的物件與物件內容中存在的其他物件具有相同的 EntityKey 時,就會發生 InvalidOperationException。如果物件內容中已經存在相同的物件執行個體,就不會發生這個錯誤。只要物件是處於 Unchanged 狀態,就可以對相同物件執行個體多次呼叫 Attach

  • 使用 AttachTo 方法可將物件附加到特定的實體集。如需詳細資訊,請參閱加入、修改和刪除物件 (Entity Framework)

  • 當使用 AttachTo 方法所附加的物件已經有定義它的實體索引鍵時,如果 entitySetName 參數的值不符合現有索引鍵中的實體集名稱,就會發生 InvalidOperationException

另請參閱

概念

中斷連結物件 (Entity Framework)
Web 服務和 Entity Data Model (應用程式案例)

其他資源

管理物件內容 (Entity Framework)