2008-10-01 27 views
9

實體框架提供了很大的靈活性,在同一的datacontext如何在沒有數據更新對象上下文

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

更新數據。如果我要搬到這個更新的功能服務層,只需要「人」的要求,在不進行深度複製的情況下,將我的「Person」請求對象分配到datacontext中的最佳方式是什麼?

回答

12

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

您還需要使用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 1
article 2

相關問題