使用 Windows Azure 更改表
Posted
技术标签:
【中文标题】使用 Windows Azure 更改表【英文标题】:Altering tables with Windows Azure 【发布时间】:2010-11-14 17:03:36 【问题描述】:我正在使用以下方法在 Windows Azure 中创建表。此代码仅在应用程序首次初始化时执行一次
TableStorage.CreateTablesFromModel(typeof(customDataServiceContext), account);
如果我想要对表进行更新(例如新列),我如何在不丢失现有数据的情况下进行这些更新?
【问题讨论】:
【参考方案1】:只需使用新字段更新用于表示实体的 CLR 类。表服务本身是无模式的,因此它唯一关心的是表的 name,即您的 CLR 类型的名称。
您无需再次调用 CreateTablesFromModel,因为该表已经存在。但是,如果您添加新表,您会这样做。您的旧表不会受此影响;已经存在的表被单独留下。
检索表中已有的实体将导致新列的值为空。
【讨论】:
我要再次调用 .CreateTableFromModel 函数吗?所以你的意思是我可以在任何时候调用架构更改并且它不会抛出异常或删除现有数据? 您只需要在向模型添加新类型时调用 CreateTablesFromModel。现有表不会受到影响【参考方案2】:Rik 正确地提到了最重要的概念:Azure 表存储没有架构。就存储系统本身而言,如果要更改存储在实体集(表)中的内容,则无需执行任何操作。当然,如果您存储了具有不同模式的实体(行),您的业务逻辑将需要准备好处理差异。例如,根据您所做的更改,您可能需要处理空值甚至不同的数据类型。
因此,系统只需要知道实体集(表)的存在,根本不关心它的内容。这就是为什么当您决定更改要存储的实体的架构时不需要调用 .CreateTableFromModel 的原因。
在我看来,Azure 的开发人员使用术语“表”来混淆开发人员,而他们真正的意思是“实体集”。 Table 引导开发人员走上一条熟悉的思维路径,其中包含固定的模式和列。你真的应该想到一个实体集一个实体容器(属性包)。唯一强制要求是每个实体必须包含 PartitionKey、RowKey 和 ModifiedDate (?) 的属性。
最后一个重要说明是,我所说的一切都适用于云中的实际 Azure 表存储设施。开发人员存储的当前实现是使用实际 SQL 数据库构建的云的本地模拟。这意味着,在使用开发存储时,您将被限制为实体集实际使用固定模式。这在开发存储对实物的模拟上是一个很大的不足,很可惜。
【讨论】:
以上是关于使用 Windows Azure 更改表的主要内容,如果未能解决你的问题,请参考以下文章
更改密码后无法使用Visual Studio 2013登录Windows azure帐户
Windows Phone 8 上的 Azure 表存储使用啥库?