我如何实现IUpdatable服务

时间:2012-08-12 14:19:23

标签: wcf-data-services odata

如果这是一个新手问题,我很抱歉,但我是C#编程的新手。

但我正在尝试编写一个WCF数据服务,它会读取数据并吐出一个odata feed就好了。我在VS中添加了服务引用,它为我创建了服务类型和数据模型,但我似乎缺少SaveChanges()方法(我看到在一堆教程中调用了它。)

这导致我IUpdatable,目前停止兔子洞。当有人说“您的服务不支持更新,因为它没有实现IUpdatable”时,这意味着什么。如何实现这个界面?它甚至意味着实现这个接口?

此外,这适用于Windows Phone应用程序。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

如果问题不是客户端上缺少的SaveChanges方法(Mark上面的答案应该解决),并且你已经创作了一个应该支持读写访问的服务,那么你可能需要实现IUpdatable接口(on服务器)。

如果您的服务使用EF提供程序,那么这应该已经有效,因为EF提供程序可以直接实现IUpdatable。

如果您的服务使用反射提供程序,那么您需要在您的上下文中实现IUpdatable。这里有一些描述:http://msdn.microsoft.com/en-us/library/dd723653.aspx

如果您正在使用自定义提供程序,那么您还需要实现IUpdatable,并且还有一些示例,但我认为您不会使用此路由: - )

答案 2 :(得分:0)