2012-08-12 76 views
0

如果這是一個新手問題,我很抱歉,但我是C#編程的新手。如何實現IUpdatable服務

但我正在嘗試編寫一個WCF數據服務,它讀取數據並吐出odata feed就好了。我在VS中添加了服務引用,它爲我創建了服務類型和數據模型,但我似乎缺少一個SaveChanges()方法(我在一堆教程中看到了這個方法)。

這導致我轉向IUpdatable,目前停止了兔子的洞。當有人說「你的服務不支持更新,因爲它沒有實現IUpdatable」,這意味着什麼。我如何實現這個接口?它甚至意味着什麼實現這個接口?

此外,這是Windows Phone應用程序。

+0

如果我對你的問題的理解是正確的,這對我來說有點令人驚訝。在「添加服務引用」(ASR)時間,我認爲客戶端不會進行任何特殊檢查來查看服務是否爲讀/寫(它實際上需要POST服務來測試)。因此理論上它應該始終生成SaveChanges()方法,而不管實現IUpdatable的服務如何。你能在這裏給我們更多的細節嗎?您正在使用哪些版本的Visual Studio,Windows Phone SDK和WCF數據服務?您是如何生成服務參考的? – 2012-08-12 15:45:02

+0

我正在使用VS2010 Ultimate,Windows Phone SDK 7.1,不確定我使用的是哪個版本的WCF數據服務。我將如何發現?我添加WCf服務的方式是右鍵單擊Referecnces,clicekd添加服務引用,輸入到我的WCF數據服務.scv url中,鍵入命名空間並單擊確定。然後它爲我創建了datasvcmap和.cs文件。 – 2012-08-12 19:02:15

+1

對不起,剛剛註冊的Windows Phone 7位 - 這些方法在WP7上是異步的,所以它們遵循「BeginSaveChanges」和「EndSaveChanges」的通用命名約定。請參閱下面的示例。 – 2012-08-12 23:44:39

回答

1

由於Windows Phone 7是基於Silverlight的,因此需要異步,因此在上下文中沒有SaveChanges方法,而是使用BeginSaveChangesEndSaveChanges方法對。你可以打電話給他們,像這樣:

private void SaveChanges_Click(object sender, RoutedEventArgs e) 
{ 
    // Start the saving changes operation. 
    svcContext.BeginSaveChanges(SaveChangesOptions.Batch, 
     OnChangesSaved, svcContext); 
} 

private void OnChangesSaved(IAsyncResult result) 
{ 
    // Use the Dispatcher to ensure that the 
    // asynchronous call returns in the correct thread. 
    Dispatcher.BeginInvoke(() => 
     { 
      svcContext = result.AsyncState as NorthwindEntities; 

      try 
      { 
       // Complete the save changes operation and display the response. 
       WriteOperationResponse(svcContext.EndSaveChanges(result)); 
      } 
      catch (DataServiceRequestException ex) 
      { 
       // Display the error from the response. 
       WriteOperationResponse(ex.Response); 
      } 
      catch (InvalidOperationException ex) 
      { 
       messageTextBlock.Text = ex.Message; 
      } 
      finally 
      { 
       // Set the order in the grid. 
       ordersGrid.SelectedItem = currentOrder; 
      } 
     } 
    ); 
} 

這樣品是來自http://msdn.microsoft.com/en-us/library/gg521146(VS.92).aspx

0

如果問題不在於客戶端上的缺少SaveChanges方法(Mark的答案上面應該解決),並且您已經創建了應該支持讀寫訪問的服務,那麼您可能需要實現IUpdatable接口(在服務器上)。

如果您的服務使用EF提供程序,那麼這應該已經可以工作,因爲EF提供程序實現了IUpdatable開箱即用。

如果您的服務使用反射提供程序,那麼您將需要在您的上下文中實現IUpdatable。這裏有一些描述:http://msdn.microsoft.com/en-us/library/dd723653.aspx

如果您使用的是自定義的供應商,那麼你也將需要實現IUpdatable並有那樣品爲好,但我不認爲你走這條路:-)