OData删除过滤器

时间:2015-10-22 11:18:10

标签: odata

我遇到的问题是我们的后端使用OData-“like”-Processor,它具有一些特殊功能。它面向OData_2.0 所以问题是: 此类以下请求的最类似OData的方法是什么

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

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

例如:我想删除价格大于10.00

的所有商品
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

2 个答案:

答案 0 :(得分:0)

您无法在单个OData查询中删除多个条目,您首先需要检索其密钥,然后发送多个删除请求。有两种方法可以改善这一过程:

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

答案 1 :(得分:0)

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

但是,对于oData v2,一个选项可能是使用请求主体传递一些数据。 DELETE / entity,包含正文中的数据。 该文档声明该约定是按键删除实体。但是,当我们不得不通过多个键删除odata v2服务时,这就是采用的方法。此外,在使用oData v2库实现此功能时,我们必须添加路由约定以支持Delete而不使用密钥。