2013-07-30 36 views
2

我的代碼如下所示:(其中「用戶」是用戶配置實例被編輯後,通過從視圖背面)MVC4 EF5更改不會保存到數據庫

UserProfile original = DBContext.UserProfiles.Where(x => x.UserId == user.UserId).FirstOrDefault(); 
if (original != null) 
{ 
    original = user; 
    DAL.DAL.Instance.TGIMobiledb.SaveChanges(); 
} 

此代碼火災沒有錯誤,但不更新數據庫。經過一番研究,看來我得打電話調用SaveChanges()

DBContext.Entry(original).State = EntityState.Modified; 

但該行代碼導致此錯誤之前,添加以下行:
「具有相同鍵的對象已經存在於ObjectStateManager的ObjectStateManager無法使用相同的密鑰跟蹤多個對象。「

的更改保存到數據庫的罰款,如果我手動分配各個領域是這樣的:

original.UserId = user.UserId; 
original.FirstName = user.FirstName; 
original.Surname = user.Surname; 
original.UserName = user.UserName; 

顯然這是不太理想,尤其是與更大的實體。

+0

這裏http://stackoverflow.com/questions/15336248/entity-framework-5-updating-a-record是一個很好的討論EF5更新實體的情況。 –

回答

1

嘗試:

DBContext.Entry(original).CurrentValues.SetValues(user); 
+0

工作就像一個魅力!謝謝哈姆! – Swifty

0

我猜你檢索用戶和檢查空,看是否需要創建或更新。您可以選擇UserId字段。

if (user.UserId == 0) 
{ 
    DBContext.UserProfiles.Add(user); 
} 
else 
{ 
    DBContext.UserProfiles.Attach(user); 
    DBContext.Entry(user).State = EntityState.Modified; 
}