我正在使用以下方法在Windows Azure中创建表。首次初始化应用程序时,此代码仅执行一次
TableStorage.CreateTablesFromModel(typeof(customDataServiceContext), account);
如果我要对表格进行更新(例如新列),如何在不丢失现有数据的情况下进行更新?
答案 0 :(得分:3)
只需使用新字段更新用于表示实体的CLR类。表服务本身是无模式的,因此它唯一关心的是表的名称,它是CLR类型的名称。
您不需要再次调用CreateTablesFromModel,因为该表已存在。但是,如果添加新表,则可以。你的旧桌子不会受此影响;已经存在的表格是单独存在的。
检索表中已有的实体将导致新列的空值。
答案 1 :(得分:1)
Rik正确地提到了最重要的概念:Azure表存储没有架构。就存储系统本身而言,如果要更改实体集(表)中存储的内容,则无需执行任何操作。当然,如果您使用不同的模式存储实体(行),则需要准备好业务逻辑以处理差异。例如,您可能需要根据您所做的更改处理空值或甚至不同的数据类型。
接下来,系统只需要知道实体集(表)的存在,并且根本不关心它的内容。这就是为什么当你决定改变你正在存储的实体的模式时,不需要调用.CreateTableFromModel。
在我看来,当Azure真正意味着“实体集”时,Azure人员会使用术语“表”来混淆开发人员。表引导开发人员熟悉固定模式和列的心理路径。你真的应该想到一个实体设置一个实体容器(属性包)。唯一的要求是每个实体必须包含PartitionKey,RowKey和ModifiedDate(?)的属性。
一个最后的重要注意事项是,我所说的一切都适用于云中的实际Azure表存储工具。开发人员存储的当前实现是使用实际SQL数据库构建的云的本地模拟。这意味着,在使用开发存储时,您将被限制为实体集实际使用固定模式。这是开发存储模拟真实内容的一个重要缺失,这是一个无赖。