如果这是一个新手问题,我很抱歉,但我是C#编程的新手。
但我正在尝试编写一个WCF数据服务,它会读取数据并吐出一个odata feed就好了。我在VS中添加了服务引用,它为我创建了服务类型和数据模型,但我似乎缺少SaveChanges()
方法(我看到在一堆教程中调用了它。)
这导致我IUpdatable
,目前停止兔子洞。当有人说“您的服务不支持更新,因为它没有实现IUpdatable
”时,这意味着什么。如何实现这个界面?它甚至意味着实现这个接口?
此外,这适用于Windows Phone应用程序。
答案 0 :(得分:1)
由于Windows Phone 7是基于Silverlight的,因此需要异步,因此上下文中没有SaveChanges
方法,而是BeginSaveChanges
和EndSaveChanges
方法对。你可以像这样打电话给他们:
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)
IUpdatable由其设计师在此描述: WCF Data Service Blog: IUpdatable & ADO.Net DataServices Framework