DataService <t>是否支持Upsert(插入或替换)</t>

时间:2013-02-27 22:58:50

标签: wcf-data-services

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

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

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

换句话说,这只适用于更新,而不是插入。

我怀疑upsert根本不受支持,但是还没有找到明确的答案。任何人都可以告诉我如何做到这一点,或确认我绝对不能?

1 个答案:

答案 0 :(得分:2)

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

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

This是msdn上关于如何构建自定义ds提供程序的一系列博客文章。