如何更新没有数据上下文的对象

Posted

技术标签:

【中文标题】如何更新没有数据上下文的对象【英文标题】:How to update object with no data contexts 【发布时间】:2010-09-14 16:31:17 【问题描述】:

实体框架提供了极大的灵活性来更新同一数据上下文中的数据

Dim personA = (from p in datacontext.Person where p.PersonID = 1 select p)
personA.name = txtName.value
datacontext.savechanges()

如果我必须将此更新功能移动到仅在请求中使用“Person”的服务层,那么将我的“Person”请求对象分配到数据上下文而不再次进行深度复制的最佳方法是什么?

【问题讨论】:

【参考方案1】:

您需要将实体对象附加到数据上下文。

您还需要使用 AttachUpdeted 方法扩展您的数据上下文部分类。当您将对象附加到数据上下文时,它不知道已经进行了更新。下面的代码将告诉数据上下文每个属性都已更新并需要写入数据库。

public static void Save(EntityObject entity)

   using(MyContext ctx = new MyContext)
   
     ctx.AttachUpdated(entity);
     ctx.SaveChanges();
     
 

public static void AttachUpdated(this ObjectContext obj, EntityObject objectDetached)

   if (objectDetached.EntityState == EntityState.Detached)
   
      object original = null;
      if (obj.TryGetObjectByKey(objectDetached.EntityKey, out original))
         obj.ApplyPropertyChanges(objectDetached.EntityKey.EntitySetName, objectDetached);
      else
       throw new ObjectNotFoundException();
    
 

article 1article 2

【讨论】:

以上是关于如何更新没有数据上下文的对象的主要内容,如果未能解决你的问题,请参考以下文章

核心数据:SQLite 没有立即更新

如何通过Hibernate即时获取更新的对象?

核心数据:更新子上下文

更新当前的 CoreData 条目

核心数据:父/子托管对象上下文是不是适合更新一组多个对象?

批量更新后更新托管对象上下文中的托管对象