Skip to content

Instantly share code, notes, and snippets.

View ealsur's full-sized avatar

Matias Quaranta ealsur

View GitHub Profile
@ealsur
ealsur / CosmosDBConnectionString.cs
Created February 15, 2019 20:11
Azure Cosmos DB + Functions Cookbook - monitoring - helper
private class CosmosDBConnectionString
{
public CosmosDBConnectionString(string connectionString)
{
// Use this generic builder to parse the connection string
DbConnectionStringBuilder builder = new DbConnectionStringBuilder
{
ConnectionString = connectionString
};
@ealsur
ealsur / Trigger.cs
Last active February 15, 2019 20:12
Azure Cosmos DB + Functions Cookbook - monitoring - trigger
[FunctionName("Trigger")]
public static void Trigger([CosmosDBTrigger(
databaseName: "%MonitoredDatabase%",
collectionName: "%MonitoredCollection%",
ConnectionStringSetting = "CosmosDB",
LeaseCollectionPrefix = "%MonitoredDatabaseLeasePrefix%",
LeaseCollectionName = "leases",
CreateLeaseCollectionIfNotExists = true)] IReadOnlyList<Document> documents,
ILogger log)
{
@ealsur
ealsur / profiles.json
Last active November 5, 2019 23:01
Windows Terminal profiles
// To view the default settings, hold "alt" while clicking on the "Settings" button.
// For documentation on these settings, see: https://aka.ms/terminal-documentation
{
"$schema": "https://aka.ms/terminal-profiles-schema",
"defaultProfile": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
"profiles":
@ealsur
ealsur / BulkCreateClient.cs
Last active October 12, 2019 00:11
Azure Cosmos DB V3 Bulk
CosmosClientOptions options = new CosmosClientOptions() {
AllowBulkExecution = true };
CosmosClient cosmosclient = new CosmosClient(connectionString, options);
@ealsur
ealsur / BulkCreateTasks.cs
Created October 12, 2019 00:20
Azure Cosmos DB V3 SDK - Bulk tasks
Container container = cosmosClient.GetContainer("myDb", "myCollection");
// Assuming your have your data available to be inserted or read
List<Task> concurrentTasks = new List<Task>();
foreach(Item itemToInsert in ReadYourData())
{
concurrentTasks.Add(container.CreateItemAsync(itemToInsert, new PartitionKey(itemToInsert.MyPk)));
}
await Task.WhenAll(concurrentTasks);
@ealsur
ealsur / transactionalbatch-create.cs
Created January 6, 2020 18:36
TransactionalBatch - Creating Batch
string partitionKey = "The Family";
ParentClass parent = new ParentClass(){ Id = "The Parent", PartitionKey = partitionKey, Name = "John", Age = 30 };
ChildClass child = new ChildClass(){ Id = "The Child", ParentId = parent.Id, PartitionKey = partitionKey };
TransactionalBatch batch = container.CreateTransactionalBatch(new PartitionKey(parent.PartitionKey))
.CreateItem<ParentClass>(parent)
.CreateItem<ChildClass>(child);
@ealsur
ealsur / transactionalbatch-execute.cs
Created January 6, 2020 18:39
TransactionalBatch - Execute Batch
TransactionalBatchResponse batchResponse = await batch.ExecuteAsync();
@ealsur
ealsur / transactionalbatch-view.cs
Created January 6, 2020 18:40
TransactionalBatch - View response
using (batchResponse)
{
if (batchResponse.IsSuccessStatusCode)
{
TransactionalBatchOperationResult<ParentClass> parentResult = batchResponse.GetOperationResultAtIndex<ParentClass>(0);
ParentClass parentClassResult = parentResult.Resource;
TransactionalBatchOperationResult<ChildClass> childResult = batchResponse.GetOperationResultAtIndex<ChildClass>(1);
ChildClass childClassResult = childResult.Resource;
}
}
@ealsur
ealsur / transactionalbatch-error.cs
Created January 6, 2020 18:42
TransactionalBatch - Error view
// Parent's birthday!
parent.Age = 31;
// Naming two childs with the same name, should abort the transaction
ChildClass anotherChild = new ChildClass(){ Id = "The Child", ParentId = parent.Id, PartitionKey = partitionKey };
TransactionalBatchResponse failedBatchResponse = await container.CreateTransactionalBatch(new PartitionKey(partitionKey))
.ReplaceItem<ParentClass>(parent.Id, parent)
.CreateItem<ChildClass>(anotherChild)
.ExecuteAsync();
using (failedBatchResponse)
public void ConfigureServices(IServiceCollection services)
{
// other services
services.AddSingleton((s) =>
{
return new CosmosClient("<connection-string>");
});
}