public async Task Load() { var response = await container.ReadItemStreamAsync(TransactionEntityId, partitionKey); if (response.IsSuccessStatusCode) { value = FromStream(response.Content); etag = value.Etag; } else { response = await container.CreateItemStreamAsync(ToStream(new TransactionRecord { Id = TransactionEntityId, PartitionId = partitionId }), partitionKey); if (!response.IsSuccessStatusCode) { throw new Exception($"Failed to create transaction record for partition {partitionKey}"); } value = FromStream(response.Content); etag = value.Etag; } }
async Task Update() { var options = new ItemRequestOptions { IfMatchEtag = etag }; var response = await container.ReplaceItemStreamAsync(ToStream(value), TransactionEntityId, partitionKey, options); value = FromStream(response.Content); etag = value.Etag; }
Stream ToStream(TransactionRecord input) { var streamPayload = new MemoryStream(); using (var streamWriter = new StreamWriter(streamPayload, DefaultEncoding, 1024, true)) { using (JsonWriter writer = new JsonTextWriter(streamWriter)) { writer.Formatting = Formatting.None; serializer.Serialize(writer, input); writer.Flush(); streamWriter.Flush(); } } streamPayload.Position = 0; return(streamPayload); }