ODATA v4 批处理 - 如何在服务器上将请求作为批处理?

ODATA v4 batching - How can I process the request as a batch on the server?

使用 ODATA v4 批处理 - 如何在服务器上将批处理请求作为批处理?

我有一个客户端成功创建了一个 POST 请求,其中 1000 个创建为我的 webapi 端点的批处理。我的端点是 运行 C# 和 Entity Framework.

问题是我端点中的控制器单独处理每个条目,并在批处理请求中每次创建时进行一次数据库访问。

所以虽然它是一个 POST,但一旦在服务器上,它们就不会作为批处理。

有没有办法将批处理请求作为一个批处理?

我在 ExecuteRequestMessagesAsync 方法中添加了对批处理程序 class 的 SaveChanges 调用,然后仅在请求不存在时才在控制器中执行 SaveChanges批量请求。这意味着虽然您单独执行每个请求,但您只是一次性将它们保存到数据库中。

在控制器中,您可以通过检查 BatchId 属性 来检查这是否是批处理的一部分。在 System.Web.OData.Batch .ODataBatchHttpRequestMessageExtensions 中有一个扩展方法 (GetODataBatchId) 可以得到这个,但在幕后,这只是从 HttpRequestMessage Properties collection。 (源代码:https://github.com/OData/WebApi/blob/master/src/System.Web.OData/OData/Batch/ODataBatchHttpRequestMessageExtensions.cs

如果您有兴趣成为 "true to the spec" 那么您应该为每个变更集保存一次而不是为整个请求保存一次。

这里有一个很好的指南:https://damienbod.com/2014/08/14/web-api-odata-v4-batching-part-10/