在客户端的一个请求中删除所有相关的OData实体

Ant*_*ott 2 c# odata breeze olingo

以罗斯文(Northwind)数据库为例,每个客户都有一组订单。我只想在一个请求中删除特定客户与其所有订单之间的所有引用。

看起来我可以做到这一点(基于spec),DELETE http://services.odata.org/V4/Northwind/Northwind.svc/Customers('ANTON')/Orders但是我想知道客户端库是否支持此功能。

我正在将Microsoft.OData.Client用于C#客户端库,将Apache Olingo(v4)用于Java,将BreezeJS用于JavaScript。任何这些示例都将不胜感激。

编辑:阐明我只是删除引用,而不是实际上删除实体本身。

小智 5

正如swl10所说,您需要依次删除每个引用。但是OData支持$ batch。您可以将所有删除方法放在一个请求中。代码如下:

DemoService dsc = new DemoService(new Uri("http://services.odata.org/V4/OData/(S(ut2byeiaglm424a0pbovpo33))/OData.svc/"));
var product = dsc.Products.Expand("Categories").Where(p => p.ID == 1).Single();

foreach (var c in product.Categories)
{
    dsc.DeleteLink(product, "Categories", c);
}
dsc.SaveChanges(SaveChangesOptions.BatchWithSingleChangeset);
Run Code Online (Sandbox Code Playgroud)

您会发现此SaveChanges仅发送一个请求$ batch。在有效负载中,有两个内部DELETE请求。