2011-09-01 57 views
0

我有一個ObjectContext與更新方法。該方法將一個通用對象作爲參數。我需要將此對象附加到ObjectContext並使用對象所具有的更改來更新數據庫。例如,我創建了一個與數據庫中的鍵和實體具有相同鍵的新對象,但其中一些字段是不同的。我想將對象附加到數據庫中相應的實體,並讓它保存新對象所做的更改。以下是我在更新方法:
ObjectContext從分離狀態更新對象

public void Update(BaseObject data, entitySetName) 
{ 
    AttachTo(entitySetName, data); 
    Refresh(RefreshMode.ClientWins, data); 
    SaveChanges(); 
} 

刷新後,得到的數據從數據庫中的字段覆蓋。退出刷新也不會更新數據庫記錄。我錯過了一步嗎?

回答

4

如果進行了任何更改,則DetectChanges()方法將更新entitystate以進行修改。

MSDN:「在POCO實體沒有跟蹤改變的代理,的經修飾的性質的改變,以修改當DetectChanges方法被稱爲改變被保存後,對象的狀態變化的狀態下,以不變。」

context.DetectChanges(); 

另外,你可以只設置狀態來修改,以便您的方法總是改掉更新,無論是否有任何改變或不:

ObjectStateManager.ChangeObjectState(data, EntityState.Modified); 
+0

我添加了ApplyOriginalValues(entitySetName,data);刷新之後,刷新之前和刪除之前刷新所有與之前使用數據庫中更新值更新的結果相同的結果。 – MBU

+0

我認爲這是反正...我編輯上面。您可以在保存之前使用Context.DetectChanges(),或者告訴狀態管理員您的數據已被修改。 –

1

使用簡單:

public void Update(BaseObject data, entitySetName) 
{ 
    AttachTo(entitySetName, data); 
    ObjectStateManager.ChangeObjectState(data, EntityState.Modified); 
    SaveChanges(); 
} 
相關問題