我们正在使用Azure移动应用为我们的Android移动应用提供离线同步和推送通知支持。
提供下载的示例项目(TodoItem)使用EntityData
和TableController
作为实现方式。 EntityData
没有PartitionKey
和RowKey
的概念。
TableEntity
是包含PartitionKey
和RowKey
的类。
当我们开始使用它来构建我们的模型而不是EntityData
时,我们被要求另外实现ITableData
- 这意味着定义属性,包括'Id','Version','UpdatedAt' ,'CreatedAt','PartitionKey'和'RowKey'。
作为使用BaaS的开发人员,如果我们要使用TableEntity
,要求实施所有这些内容是不是太过分了?有没有办法使用EntityData
,仍然可以指定PartitionKey
和RowKey
?
非常感谢任何帮助。
答案 0 :(得分:1)
您可以将EntityData转换为DynamicTableEntity,并在从Azure Table Storage写入/读取时使用它。在执行DynamicTableEntity转换时,您可以为实体分配所需的任何分区键和行键。
如果您不熟悉如何进行转换,可以查看此Nuget包: https://www.nuget.org/packages/ObjectFlattenerRecomposer/
这将获取任何对象并将其转换为EntityProperty Dictionary,然后您可以设置其PK和RK并创建动态表实体。
我还与Azure团队合作,将此API集成到Azure Storage SDK中: https://github.com/Azure/azure-storage-net/pull/337/files
用法:
使用ObjectFlattenerRecomposer;
//展平对象并将其转换为EntityProperty Dictionary
Dictionary flattenedProperties = EntityPropertyConverter.Flatten(complexObject);
//创建一个DynamicTableEntity并设置其PK和RK
DynamicTableEntity dynamicTableEntity = new DynamicTableEntity(partitionKey,rowKey);
dynamicTableEntity.Properties = flattenedProperties;
//使用客户端SDK
将DynamicTableEntity写入Azure表存储//使用相同的PK和RK从AzureTableStorage读取实体作为DynamicTableEntity
DynamicTableEntity entity = [使用PK和RK从Azure读取];
//将DynamicTableEntity转换回原始复杂对象。
想象一下原始的complexObject是Order类型。
订单订单= EntityPropertyConverter.ConvertBack(entity.Properties);