Dot-Net

如何更新沒有數據上下文的對象

  • April 10, 2013

實體框架提供了極大的靈活性來更新同一數據上下文中的數據

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

如果我必須將此更新功能移動到僅在請求中接受“Person”的服務層,那麼將我的“Person”請求對象分配到數據上下文而不再次進行深度複製的最佳方法是什麼?

您需要將實體對象附加到數據上下文。

您還需要使用 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();
   }
} 

第 1

條 第 2 條

引用自:https://stackoverflow.com/questions/160288