使用ODATA v4批处理 - 如何在服务器上批量处理批处理请求?
我有一个客户端成功创建一个1000的POST请求作为批量创建到我的webapi端点。我的端点正在运行C#和实体框架。
问题是我的终端中的控制器单独处理每个条目,并在批处理请求中按每次创建进行数据库访问。
因此,虽然它是一个POST,但一旦在服务器上,它们就不会作为批处理。
有没有办法以批处理方式处理批处理请求?
答案 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/