wcf-data-services - DataService<T> 是否支持Upsert(插入或替换)

标签 wcf-data-services

据我了解,基于 OData 的服务支持“upsert”(即插入一行,或者如果具有此键的行已存在则更新它)的常用方法是通过包含过滤器的 PUT 请求用于行键和分区键。

http://myaccount.table.core.windows.net/mytable(PartitionKey='myPartitionKey', RowKey='myRowKey1')

据我所知,这就是Azure表存储支持upsert的方式。但据我所知,如果您在使用 .NET Framework 的内置实现的自己的 OData 服务上尝试同样的操作 DataService<T> ,只有当该行已经存在时才会成功。如果该行不存在,我会收到 404 错误。

换句话说,这仅适用于更新,不适用于插入。

我怀疑根本不支持 upsert,但一直无法找到明确的答案。谁能告诉我如何做到这一点,或者确认我绝对不能?

最佳答案

您可以尝试创建自己的自定义查询提供程序(IDataServiceQueryProvider 的实现)。如果用户请求的单个对象不存在并且当前 http 请求的方法是 PUT,则返回一个具有给定 id 的新对象。我认为内置更新提供程序应该能够从那里处理它并更新记录。否则,您可能还需要自己的更新提供程序。

使用WCF Data Services Toolkit可能会让你的工作更轻松。否则,您将不得不编写自己的 linq 提供程序,这对于集成测试来说听起来有点大材小用。

This msdn 上有一系列不错的博客文章,描述了如何构建自定义 ds 提供程序。

关于wcf-data-services - DataService<T> 是否支持Upsert(插入或替换),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15124186/

相关文章:

c# - WCF 数据服务和映射的 DTO

silverlight - Silverlight 的 WCF 数据服务是否已死?

c# - ADO 数据服务的预测

c# - 查询中带有 URL 的 WCF 数据服务

.net - 如何通过 WCF 数据服务公开 TimeSpan?

c# - 如何将参数传递给带有特殊字符的 WCF Web 服务?

wcf - WCF/CaSTLe 内存泄漏

c# - 将 ADO.NET 数据服务和自定义 ServiceContract 组合在同一个类中?

wpf - VS2017中WPF项目中的WCF数据服务引用

WCF 数据服务版本 5.0 和 Json