Session: How to Defer Operations
Operations can be deferred till SaveChanges
is called by using Defer
method in Advanced
session operations. All of the operations will update session state appropriately after SaveChanges
is called.
Types of commands that can be deferred:
- PutCommandData
- DeleteCommandData
- DeletePrefixedCommandData
- PatchCommandData
- PutAttachmentCommandData
- DeleteAttachmentCommandData
- CopyAttachmentCommandData
- MoveAttachmentCommandData
- CountersBatchCommandData
Syntax
// Defer is available in the session's Advanced methods
session.Advanced.Defer(
// Define commands to be executed:
// i.e. Put a new document
new PutCommandData("products/999-A", null, new DynamicJsonValue
{
["Name"] = "My Product",
["Supplier"] = "suppliers/1-A",
["@metadata"] = new DynamicJsonValue
{
["@collection"] = "Products"
}
}),
// Patch document
new PatchCommandData("products/999-A", null, new PatchRequest
{
Script = "this.Supplier = 'suppliers/2-A';"
},
null),
// Force a revision to be created
new ForceRevisionCommandData("products/999-A"),
// Delete a document
new DeleteCommandData("products/1-A", null)
);
// All deferred commands will be sent to the server upon calling SaveChanges
session.SaveChanges();
Parameters | ||
---|---|---|
ICommandData | Command to be executed. | |
ICommandData[] | Array of commands implementing ICommandData interface. |
Example
session
.Advanced
.Defer(
new PutCommandData("products/999-A", null, new DynamicJsonValue
{
["Name"] = "My Product",
["Supplier"] = "suppliers/999-A",
["@metadata"] = new DynamicJsonValue
{
["@collection"] = "Users"
}
}),
new PutCommandData("suppliers/999-A", null, new DynamicJsonValue
{
["Name"] = "My Product",
["Supplier"] = "suppliers/999-A",
["@metadata"] = new DynamicJsonValue
{
["@collection"] = "Suppliers"
}
}),
new DeleteCommandData("products/1-A", null)
);