2010-07-22 125 views
0

我在使用ADO.NET數據服務更新對象時遇到了問題。ADO.NET數據服務不更新

首先我創建了一個服務,它可以加載和存儲數據。它是實現IUpdatable接口的基本數據上下文。

之後,我創建了一個簡單的服務客戶端。我只是用Visual Studio中的「添加服務」引用創建它。基本上這個服務接縫工作。我可以查詢對象並存儲新對象。但是我無法更新對象。

這是客戶對我的更新代碼:

 var ctx = 
      new TeamDataContext(new Uri("http://localhost:8637/TeamInfoService.svc")); 
     var team = ctx.Teams.First(); 
     team.TeamName = "New Team Name"; 
     ctx.UpdateObject(team); 

     ctx.SaveChanges(); 

什麼我的主要問題是,IUpdatable.SetValue()不要求我要更新的對象。只調用IUpdatable.SaveChanges()而不更新服務器上的對象。

當我創建一個新的對象時,在服務器上調用IUpdatable.SetValue來設置屬性。

那麼我做錯了什麼?我的期望錯了嗎?更新對象時應該調用IUpdatable.SetValue嗎?或者我需要做更多的事情來做更新?

編輯:我只是看了客戶端和服務器之間的HTTP請求。客戶端發送一個HTTP-Merge請求和更改。但是我仍然不知道爲什麼沒有存儲更改。

回答

1

我剛剛發現了什麼問題,現在感覺像個白癡。 TeamName屬性是對象的關鍵字。當然,當您更改密鑰時,實際上找不到要更新的對象。因此它不能更新屬性。

所以,永遠不要試圖更新對象的關鍵=)

+1

這其實有點不同。它應該仍然可以找到對象(上下文會記住與實體的鏈接,而不管關鍵字的值如何),但服務器會忽略關鍵屬性的udpates,因爲這會改變實體的身份,這是不允許的。請注意,它會默默執行(按設計)。 – 2010-07-22 18:18:53

+0

感謝您提供更準確的解釋 – Gamlor 2010-07-22 18:31:59