OData etag处理相关实体

时间:2015-08-07 05:29:41

标签: odata etag

我正在为销售订单对象构建OData服务。为简单起见,假设销售订单对象有2个实体 - 标题和项目。从业务角度来看,标题具有总金额,该金额根据项目金额值进行更新。

现在我有一个客户端应用程序,其中提取和显示标题和项目。当客户端应用程序获取订单时,Header实体具有Etag HE1,而Item实体(假设只有1个项目)具有Etag值IE1。

客户端应用程序更新“项目金额”值。对项目进行PATCH调用,导致项目Etag从IE1改变 - > IE2。然而,即使没有对标题进行显式更新,由于总金额计算逻辑,标题Etag在技术上也从HE1 - >改变。 HE2。但是,由于PATCH操作仅在Item级别完成,客户端如何知道Header etag已更改?如果客户端现在尝试更新标头(通过单独的PATCH调用),如果没有此信息,那么现在将失败,因为标头的ETag同时发生了变化。

关于如何做到这一点的任何想法?

1 个答案:

答案 0 :(得分:0)

您提到的场景不仅可以使用OData服务,还可以使用使用乐观锁定的应用程序。我看到的唯一解决方案是客户端应用程序必须知道更改销售订单项也会影响销售订单标题。

因此,客户端应用程序必须在成功的PATCH请求之后重新加载标头数据(可能使用批处理请求将项目上的PATCH和标头上的GET捆绑在一起)。在此之后,客户端应用程序知道更新的标头数据和新的标头ETag值。