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