【问题标题】:OData etag handling for related entities相关实体的 OData etag 处理
【发布时间】:2023-04-05 17:08:02
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: odata etag


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多