private async Task <List <TableOperation> > BuildTableOperationUpdate(T entity) { var entityIdValues = EntityDefinition.GetIdValues(entity); var idString = string.Join(StorageQueryBuilder.PARTITION_FIELD_SEPARATOR, entityIdValues.Select(StorageQueryBuilder.NormalizeStringValue)); var serializedField = EntityProperty.GeneratePropertyForByteArray(BSonConvert.SerializeObject(entity)); var fields = GetEntityFilterableFields(entity); var record = GenerateRecordMainPartition(entity, serializedField, fields); List <TableOperation> operations = new List <TableOperation> { TableOperation.Replace(record) }; var old = await GetById(idString).ConfigureAwait(false); if (old != null) { var oldFields = GetEntityFilterableFields(old); operations.AddRange(GeneratePersistPartitionData(old, null, oldFields).Select(TableOperation.Delete)); } return(operations); }
private async Task <List <TableOperation> > BuildTableOperationUpsert(T entity) { var entityId = EntityDefinition.GetIdValues(entity); var serializedField = EntityProperty.GeneratePropertyForByteArray(BSonConvert.SerializeObject(entity)); var fields = GetEntityFilterableFields(entity).ToList(); var record = GenerateRecordMainPartition(entity, serializedField, fields); List <TableOperation> operations = new List <TableOperation> { TableOperation.InsertOrReplace(record) }; operations.AddRange(GeneratePersistPartitionData(entity, serializedField, fields) .Select(TableOperation.InsertOrReplace)); var idValue = string.Join(StorageQueryBuilder.PARTITION_FIELD_SEPARATOR, entityId.Select(StorageQueryBuilder.NormalizeStringValue)); var old = await GetById(StorageQueryBuilder.GetTableKeyNormalizedValue(idValue)).ConfigureAwait(false); if (old != null) { var oldFields = GetEntityFilterableFields(old); IEnumerable <TableOperation> deleteOperations = GeneratePersistPartitionData(old, null, oldFields) .Select(TableOperation.Delete) .Where(d => !operations.Any(o => o.Entity.PartitionKey == d.Entity.PartitionKey && o.Entity.RowKey == d.Entity.RowKey)) .ToList(); operations.AddRange(deleteOperations); } return(operations); }
public static TableStorageQueryContext Create(string serializedContext, int?pageSize = null) { var result = BSonConvert.DeserializeFromBase64String <TableStorageQueryContext>(serializedContext); if (pageSize.HasValue) { result.ContinuationInfo.PageSize = pageSize.Value; } return(result); }
private byte[] ComputeDefinitionHash() { var bsonDefinition = BSonConvert.SerializeObject(EntityDefinition); using (var sha1Hash = SHA1.Create()) { byte[] data = sha1Hash.ComputeHash(bsonDefinition); return(data); } }
private async Task <StorageQueryResult <T> > ExecuteQueryAsync(TableStorageQueryContext queryContext) { var table = await TableAsync().ConfigureAwait(false); var result = await table.ExecuteQuerySegmentedAsync(queryContext.ContinuationInfo.Query, queryContext.ContinuationInfo.ContinuationToken).ConfigureAwait(false); queryContext.ContinuationInfo.ContinuationToken = result.ContinuationToken; queryContext.ContinuationInfo.HasMoreResult = result.ContinuationToken != null; var records = result.Results.Select(d => BSonConvert.DeserializeObject <T>(d.Properties["Content"].BinaryValue)); return(new StorageQueryResult <T> { QueryContext = BSonConvert.SerializeToBase64String(queryContext), Records = records, HasMoreResult = queryContext.HasMoreResult }); }
private StorageQueryResult <T> ExecuteQuery(TableStorageQueryContext queryContext) { var table = Table(); var continuationInfos = new List <TableStorageContinuationInfo>(); var result = table.ExecuteQuerySegmented(queryContext.ContinuationInfo.Query, queryContext.ContinuationInfo.ContinuationToken); queryContext.ContinuationInfo.ContinuationToken = result.ContinuationToken; queryContext.ContinuationInfo.HasMoreResult = result.ContinuationToken != null; var records = result.Results.Select(d => BSonConvert.DeserializeObject <T>(d.Properties["Content"].BinaryValue)); return(new StorageQueryResult <T> { Contexts = BSonConvert.SerializeToBase64String(queryContext), Records = records, HasMoreResult = queryContext.HasMoreResult }); }
private List <TableOperation> BuildTableOperationInsert(T entity) { List <KeyValuePair <string, EntityProperty> > fields = GetEntityFilterableFields(entity).ToList(); EntityProperty serializedField = EntityProperty.GeneratePropertyForByteArray(BSonConvert.SerializeObject(entity)); var record = GenerateRecordMainPartition(entity, serializedField, fields); List <TableOperation> operations = new List <TableOperation> { TableOperation.Insert(record) }; foreach (var partitionRecord in GeneratePersistPartitionData(entity, serializedField, fields)) { operations.Add(TableOperation.Insert(partitionRecord)); } return(operations); }