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

时间:2017-10-23 22:27:19

标签: c# entity-framework odata odata-v4

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

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

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

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

有没有办法以批处理方式处理批处理请求?

1 个答案:

答案 0 :(得分:1)

我在SaveChanges方法中向我添加了ExecuteRequestMessagesAsync调用批处理程序类,如果请求不是批处理请求,则只在控制器中执行SaveChanges。这意味着虽然您单独执行每个请求,但您只能一次性将它们保存到数据库中。

在控制器中,您可以通过检查BatchId属性来检查这是否是批处理的一部分。 GetODataBatchId中有一种扩展方法(System.Web.OData.Batch .ODataBatchHttpRequestMessageExtensions)来实现这一点,但这只是从BatchId HttpRequestMessage获取名为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/