Article For
3.0 4.0 4.1 4.2 5.0 5.1 5.2 5.3

Batches: How to send multiple commands using a batch?

To send multiple operations in a single request, reducing the number of remote calls and allowing several operations to share same transaction, Batch should be used.


BatchResult[] Batch(IEnumerable<ICommandData> commandDatas);
An array of following commands:
- PutCommandData
- DeleteCommandData
- PatchCommandData
- ScriptedPatchCommandData
ICommandData Commands to process.
Return Value
BatchResult[] An array of batch results matching exactly the order of commands send.


BatchResult[] results = store
	.Batch(new ICommandData[]
			       new PutCommandData
					       Key = "products/999",
						   Document = RavenJObject.FromObject(new Product
								Name = "My Product",
								Supplier = "suppliers/999"
							Metadata = new RavenJObject()
				   new PutCommandData
							Key = "suppliers/999",
							Document = RavenJObject.FromObject(new Supplier
								Name = "My Supplier",
							Metadata = new RavenJObject()
				   new DeleteCommandData
							Key = "products/2"


If an ETag is specified in the command, that ETag is compared to the current ETag on the document on the server. If the ETag does not match, a 409 Conflict status code will be returned from the server, causing a ConcurrencyException to be thrown. In such a case, the entire operation fails and non of the updates that were attempted will succeed.


All the operations in the batch will succeed or fail as a transaction. Other users will not be able to see any of the changes until the entire batch completes.