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中文网其他相关文章!