2017-10-23 1 views
0

Mit ODATA v4 Batching - Wie kann ich eine Stapelanforderung als Batch auf dem Server verarbeiten?ODATA v4 Batch - Wie kann ich die Anfrage als Batch auf dem Server verarbeiten?

Ich habe einen Client erfolgreich erstellt eine POST-Anfrage von 1000 erstellt als Batch zu meinem Webapi-Endpunkt. Mein Endpunkt führt C# und Entity Framework aus.

Das Problem ist, dass der Controller in meinem Endpunkt jeden Eintrag einzeln verarbeitet und einen DB-Trip pro create innerhalb der Stapelanforderung durchführt.

Also, während es ein POST ist, einmal auf dem Server, werden sie nicht als Batch behandelt.

Gibt es eine Möglichkeit, die Stapelanforderung als Stapel zu verarbeiten?

+0

AddRange? Methode –

+0

Wird nicht verwendet werden, der ODATA-Controller ist nur öffentliche asynchrone Aufgabe Post (MyEntity myEntity) - das 1000x aufgerufen wird. Ich brauche eine Möglichkeit, dieses Verhalten zu übersteuern. – Matt

+0

Ich habe einen SaveChanges zum Batch-Handler hinzugefügt und dann ein if um die SaveChanges im Controller hinzugefügt, so dass es nicht ausgeführt wurde, wenn ich in einem Batch war. Das bedeutete, dass obwohl ich diesen Code 1000 mal ausgeführt habe, nur einmal die Datenbank getroffen hat, denkst du, dass das für dich funktionieren könnte? – TomDoesCode

Antwort

1

Ich habe eine SaveChanges Aufruf an mich Batch-Handler-Klasse in der ExecuteRequestMessagesAsync Methode und dann nur ausgeführt SaveChanges in der Steuerung, wenn die Anfrage keine Batch-Anfrage ist. Dies bedeutet, dass Sie zwar alle Ihre Anfragen einzeln ausführen, diese jedoch nur auf einmal in der Datenbank gespeichert werden.

In der Steuerung können Sie überprüfen, ob dies Teil einer Charge ist, indem Sie die Eigenschaft BatchId überprüfen. Es gibt eine Erweiterungsmethode (GetODataBatchId) in System.Web.OData.Batch .ODataBatchHttpRequestMessageExtensions, um dies zu bekommen, aber unter der Haube, das ist nur eine Eigenschaft namens BatchId aus der HttpRequestMessageProperties Sammlung. (Quellcode: https://github.com/OData/WebApi/blob/master/src/System.Web.OData/OData/Batch/ODataBatchHttpRequestMessageExtensions.cs)

Wenn Sie daran interessiert sind, "der Spezifikation treu" zu sein, sollten Sie einmal pro Änderungsset anstatt einmal für die gesamte Anfrage speichern.

Ein guter Führer für diese gibt es hier: https://damienbod.com/2014/08/14/web-api-odata-v4-batching-part-10/

Verwandte Themen