OData Delete with Filter



我有一个问题,我们的后端使用一个OData-"类似"的处理器,它有一些特殊的功能。它是面向OData_2.0的所以问题是:对于以下请求,最像OData的方法是什么

我们的后端数据模型没有单属性键。但是,如果可能的话,建议使用OData-Like。

首先:我需要通过一个OData请求删除几个对象。我的第一个想法是使用过滤器来定义应该删除哪些对象。但我不确定这是否是正确的方法。

例如:我想删除所有价格大于10.00的item

http://.../<oDataServiceX>/Item?$filter=ItemPrice gt 10.00

第二种:当我想要删除一个不能被单个键属性识别的对象时。如何在经典的OData-Delete-Request-Syntax中定义呢?

下面的odata类似吗?

http://.../<oDataServiceX>/Item(1,54,2)  //3 Attributes which define the key for the Item

或者我应该再做一次过滤器?(如果过滤器是一个合适的方法)。

http://.../<oDataServiceX>/Item?$filter=keyAttr1 eq 1 and keyAttr2 eq 54 and keyAttr 3 eq 2

您不能在单个OData查询中删除多个条目,您需要首先检索它们的键,然后发送多个删除请求。有两种方法可以改进此过程:

  1. 使用OData批处理在单个HTTP调用中发送所有删除请求。
  2. 使用一些可以使用过滤器模拟删除的库(在内部,它们将发出多个请求,但对于应用程序来说,它看起来像一个调用)。其中一个库是Simple.OData.Client.

Odata v4支持DELETE/entity(key1= ", key2= ")等格式。

然而,对于oData v2,一种选择是使用请求体传递一些数据。DELETE/entity,主体中有数据。文档说明约定是按键删除实体。但是,当我们必须为odata v2服务按多个键进行删除时,采用的就是这种方法。此外,在使用oData v2库实现此功能时,我们必须添加一个路由约定来支持不带键的Delete。

最新更新