0

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

我有一个客户端成功创建了一个 1000 的 POST 请求,并将其作为批处理创建到我的 webapi 端点。我的端点正在运行 C# 和实体框架。

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

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

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

4

1 回答 1

1

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

在控制器中,您可以通过检查BatchId属性来检查这是否是批次的一部分。有一个扩展方法 ( GetODataBatchId)System.Web.OData.Batch .ODataBatchHttpRequestMessageExtensions来获取它,但在底层,这只是获取BatchIdHttpRequestMessage Properties集合中调用的一个属性。(源代码:https ://github.com/OData/WebApi/blob/master/src/System.Web.OData/OData/Batch/ODataBatchHttpRequestMessageExtensions.cs )

如果您对“忠实于规范”感兴趣,那么您应该为每个变更集保存一次,而不是为整个请求保存一次。

此处提供了一个很好的指南:https ://damienbod.com/2014/08/14/web-api-odata-v4-batching-part-10/

于 2017-10-26T06:42:25.007 回答