.net 使用Windows Azure更改表
我正在使用以下方法在WindowsAzure中创建表。此代码仅在应用程序首次初始化时执行一次.net 使用Windows Azure更改表,.net,azure,azure-storage,.net,Azure,Azure Storage,我正在使用以下方法在WindowsAzure中创建表。此代码仅在应用程序首次初始化时执行一次 TableStorage.CreateTablesFromModel(typeof(customDataServiceContext), account); 如果我要对表进行更新(例如新列),如何在不丢失现有数据的情况下进行更新?只需更新用于用新字段表示实体的CLR类即可。表服务本身是无模式的,因此它只关心表的名称,即CLR类型的名称 您不需要再次调用CreateTablesFromModel,因为该
TableStorage.CreateTablesFromModel(typeof(customDataServiceContext), account);
如果我要对表进行更新(例如新列),如何在不丢失现有数据的情况下进行更新?只需更新用于用新字段表示实体的CLR类即可。表服务本身是无模式的,因此它只关心表的名称,即CLR类型的名称 您不需要再次调用CreateTablesFromModel,因为该表已经存在。但是,如果添加新表,则会添加新表。您的旧表将不受此影响;已经存在的表将被单独保留
检索表中已有的实体将导致新列的值为空。Rik正确地提到了最重要的概念:Azure表存储没有架构。就存储系统本身而言,如果要更改实体集(表)中存储的内容,则无需执行任何操作。当然,如果您使用不同的模式存储了实体(行),那么您的业务逻辑需要准备好处理这些差异。例如,根据所做的更改,您可能需要处理空值甚至不同的数据类型 因此,系统只需要知道实体集(表)的存在,而不关心它的内容。这就是为什么当您决定更改所存储实体的架构时,不需要调用.CreateTableFromModel 在我看来,Azure用户使用术语“表”来迷惑开发人员,而实际上他们的意思是“实体集”。表通过固定的模式和列引导开发人员走上熟悉的思维道路。你真的应该考虑一个实体集,一个实体容器(属性包)。唯一的强制要求是每个实体必须包含PartitionKey、RowKey和ModifiedDate(?)的属性
最后一个重要的注意事项是,我所说的一切对于云中的实际Azure表存储设施都是正确的。开发人员存储的当前实现是使用实际SQL数据库构建的云的本地模拟。这意味着,在使用开发存储时,将限制您对实体集实际使用固定模式。这是开发存储模拟真实事物的一个明显缺陷,而且很糟糕。我是否再次调用.CreateTableFromModel函数?因此,您的意思是,我可以在任何时候更改架构时调用它,它不会引发异常或删除现有数据?您只需要在向模型添加新类型时调用CreateTablesFromModel。现有表不会受到影响