Azure TableServiceEntity - 存储复杂的类

Rya*_*yan 8 c# azure azure-table-storage

通过TableServiceEntity在Azure Table Services中存储数据,您只能使用具有公共get/set的常用基本类型(int,string,datetime等).

你从序列化中得到的通常的魔法都没有处理集合,复杂类型,继承等.

解决这个问题的不同方法可能是

  • 连接到WritingEntity和ReadingEntity事件以手动设置属性(包括使用一些序列化方法处理复杂类型到普通字符串属性).
  • 与上面类似,但使用额外的"存储类"在YourClass < - > YourClassStorage < - > TableServices之间进行转换
  • 使用Lokad.Cloud的FatEntitiesLucifure等框架

我错过了什么吗?在哪种情况下哪种方法最好?

Igo*_*rek 5

ATS支持继承.将保留并检索已实现的具体类中的所有继承属性.但是,确实不支持复杂类型.

至少还有一种方法可以处理对象树和对象关系的持久性:将相关对象分别存储在不同的PartitionKey/RowKey下.

实现该方法的最简单(强力)方法可能需要您对ATS进行多次调用,以便您可以正确地反序列化对象.

如果针对存储执行的事务数量比使用的存储空间和带宽更重要,那么该方法的更优雅的扩展将是为您的实体实现接口并创建实现所有这些接口的"宽"Union实体 - 这就是存储和检索的人.检索到的每个Union对象仅通过特定接口使用.您可以通过这种方式存储集合以及简单的相关实体 - 只需确保您的PartitionKey对于与Union对象相关的每个人都是相同的,并且您有一种方法可以识别哪个Union对象表示哪个实体类型.

HTH