2010-07-10 161 views
2

我使用ADO.net實體數據模型用於數據庫工作。更新在ADO.net實體數據模型中不起作用

在我的程序中,我想更新用戶表的記錄,所以我使用下面的代碼來執行此操作。

在此函數中,我發送更改的用戶信息,然後用當前用戶信息覆蓋信息。

我運行objUser = _user;後,然後致電objContext.SaveChanges();保存更改。

但是當我這樣做時,更改不會持久到數據庫。我將這段代碼用於其他程序,但在這種情況下,代碼不起作用!

public void Update(tbLiUser _user) 
{ 
    LinkContext objContext = this.Context; 

    tbLiUser objUser = objContext.tbLiUsers.First(u => u.tluId == _user.tluId); 
    objContext.Attach(objUser); 
    objUser = _user; 

    objContext.SaveChanges(); 
} 

回答

2

首先,如果你已經從objContext檢索objUser,真的沒有點在用戶連接到上下文只是取回後。所以,我在這裏完全放棄這一行:

objContext.Attach(objUser); 

而且 - 你可能只需要從值更新每個屬性的基礎上objUser_user,而不僅僅是分配整個對象。

爲了幫助您避免繁瑣的代碼,您可以使用類似AutoMapper之類的東西來讓您將屬性從一種對象類型分配給另一種。或者你可以創建一個智能程序會比較上objUser,它們事實上從_user的值不同的兩個objUser_user和更新只有那些特性 - 不應該太難創建方法:

objUser.UpdateValuesFromOtherUser(_user); 
objContext.SaveChanges(); 
+0

objUser和_user是對象的句柄。當你找到objUser時,你會發現一個對象,把它的句柄賦給objUser,並將它添加到你的上下文中。當你說objUser = _user時,你不更新對象,你只是將變量指向一個不同的對象。上下文仍然指向舊對象。正如marc_s所說,你需要一個接一個地複製屬性,或者有一些快捷方式可以「批量」複製它們,但重點是你必須更新現有的對象,而不是重新分配它。 – Jay 2013-03-15 21:38:12

相關問題