private async Task<DynamicTableEntity> FetchFatEntity(DynamicTableEntity e) { var size = e.Properties["fat"].Int32Value.Value; byte[] bytes = new byte[size]; await Configuration .GetBlocksContainer() .GetBlockBlobReference(e.GetFatBlobName()) .DownloadRangeToByteArrayAsync(bytes, 0, 0, bytes.Length).ConfigureAwait(false); e = new DynamicTableEntity(); e.Deserialize(bytes); return e; }
private async Task UpdateEntity(CloudTable table, DynamicTableEntity entity) { try { await table.ExecuteAsync(TableOperation.Merge(entity)).ConfigureAwait(false); return; } catch(StorageException ex) { if(!Helper.IsError(ex, "EntityTooLarge")) throw; } var serialized = entity.Serialize(); Configuration .GetBlocksContainer() .GetBlockBlobReference(entity.GetFatBlobName()) .UploadFromByteArray(serialized, 0, serialized.Length); entity.MakeFat(serialized.Length); await table.ExecuteAsync(TableOperation.InsertOrReplace(entity)).ConfigureAwait(false); }