Azure表存储 - C#Server SDK - TableEntity与EntityData和TableController与ApiController(使用MobileAppController注释)

时间:2016-09-02 05:47:02

标签: c# azure azure-mobile-services

我们正在使用Azure移动应用为我们的Android移动应用提供离线同步和推送通知支持。

提供下载的示例项目(TodoItem)使用EntityDataTableController作为实现方式。 EntityData没有PartitionKeyRowKey的概念。

TableEntity是包含PartitionKeyRowKey的类。

当我们开始使用它来构建我们的模型而不是EntityData时,我们被要求另外实现ITableData - 这意味着定义属性,包括'Id','Version','UpdatedAt' ,'CreatedAt','PartitionKey'和'RowKey'。

作为使用BaaS的开发人员,如果我们要使用TableEntity,要求实施所有这些内容是不是太过分了?有没有办法使用EntityData,仍然可以指定PartitionKeyRowKey

非常感谢任何帮助。

1 个答案:

答案 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);