Entity Framework 4 物件管理:ObjectContext.AddObject 與 Attach 方法詳解
Entity Framework 4 提供兩種方法來管理上下文中的物件:ObjectContext.AddObject
和 ObjectSet.AddObject
用於新增物件;ObjectContext.Attach
和 ObjectSet.Attach
用於指示現有物件。雖然名稱相似,但它們在物件生命週期管理中扮演著截然不同的角色。
ObjectContext.AddObject 和 ObjectSet.AddObject:物件的誕生
處理新實體時,使用 ObjectContext.AddObject
和 ObjectSet.AddObject
。這些方法將資料庫中尚不存在的物件加入到上下文中。新增的實體會獲得一個暫時的 EntityKey 和 Added 的 EntityState。呼叫 SaveChanges
後,框架會辨識這些物件為需要插入資料庫的實體。
ObjectContext.Attach 和 ObjectSet.Attach:與已有物件的連接
與 AddObject
不同,ObjectContext.Attach
和 ObjectSet.Attach
用於已經存在於資料庫中的物件。 Attach
不會將 EntityState 設為 Added,而是將其設為 Unchanged,表示自附加到上下文以來物件保持不變。使用 Attach
標記的實體透過符合其 EntityKey 值在資料庫中找到,並在呼叫 SaveChanges
時相應地進行更新或刪除。
Attach 方法的實際應用範例
AddObject
用於建立新實體,而 Attach
在處理現有物件時非常有用。例如,要將現有 Person 實體連接到上下文中的現有 Address 實體:
<code class="language-csharp">var existingPerson = ctx.Persons.SingleOrDefault(p => p.Name == "Joe Bloggs"); var myAddress = ctx.Addresses.First(a => a.PersonID != existingPerson.PersonID); existingPerson.Addresses.Attach(myAddress); // 或: myAddress.PersonReference.Attach(existingPerson); ctx.SaveChanges();</code>
Attach
操作確保 Address 實體被識別為現有實體並連接到 Person 實體,從而實現正確的資料庫更新或刪除操作。
以上是實體框架 4 中的 AddObject 與 Attach:何時使用每種方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!