我正在尝试开始使用 Azure 表。我了解到 Azure 表存储特定类的对象。你能告诉我这张桌子如何适应班级的版本吗?
假设有一个具有属性 p1 的类 A 开始,并假设我们已经将 A 类型的对象 o1 和 o2 存储到表 T 中。让我们稍后说我们向 A 添加另一个属性 p2。现在,我们会得到什么样的行为我们使用 A 的新定义来检索 o1 和 o2?它会抛出一些错误吗?如果不是,当检索到这些对象时,p2 的值是多少?
还是开发人员负责在他的应用程序中管理不同的类定义?
我正在尝试开始使用 Azure 表。我了解到 Azure 表存储特定类的对象。你能告诉我这张桌子如何适应班级的版本吗?
假设有一个具有属性 p1 的类 A 开始,并假设我们已经将 A 类型的对象 o1 和 o2 存储到表 T 中。让我们稍后说我们向 A 添加另一个属性 p2。现在,我们会得到什么样的行为我们使用 A 的新定义来检索 o1 和 o2?它会抛出一些错误吗?如果不是,当检索到这些对象时,p2 的值是多少?
还是开发人员负责在他的应用程序中管理不同的类定义?
非常重要的注意事项:不要将 Azure Tables 视为object store
! 将其视为key-value store
具有非固定模式的。
为你举个例子。当您 storeo1
和o2
fromclass A
时,您的表中将有 2 行:
然后将新属性添加到该类并存储该对象。结果将是第三行:
稍后您可以检索所需的所有数据并将其映射到具有与表列对应的属性名称的类的实例!
如果您尝试将前两条记录提取到最新的 A 类中,您将只获得NULL
该属性的一个(或值类型的默认值)p2
。
如果您尝试将第 3 行提取到较早的 A 类中,您将只能获得p1
属性值。(最终您可能会看到一个错误,但不是关键错误,您仍然可以将表中的 P1 列映射到对象的 P1 属性)。
作为参考,了解表服务数据模型对您来说是一个很好的起点。
在您刚开始时,我还建议您阅读Windows Azure Storage Client library 2.0 - Tables Deep Dive。本文非常详细地描述了如何从 Azure 表中保存和获取数据。
准确地说,当您检索前三个对象时,它们只会在没有 p2 的情况下出现。如果您使用 TableEntity 类的默认反序列化方法,您的对象将 p2 为 null。