O数据通过过滤器删除

问题描述 投票:0回答:2

我遇到的问题是我们的后端使用 OData“类似”处理器,它具有一些特殊功能。它面向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
odata
2个回答
0
投票

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

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

希望这有帮助。


0
投票

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

但是,对于 oData v2,一种选择可能是使用请求正文传递一些数据。删除/实体,数据在正文中。 文档指出约定是通过键删除实体。然而,当我们必须通过多个键删除 odata v2 服务时,就采用了这种方法。此外,在使用 oData v2 库实现此功能时,我们必须添加路由约定以支持无密钥删除。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.