Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 使用Windows Azure更改表_.net_Azure_Azure Storage - Fatal编程技术网

.net 使用Windows Azure更改表

.net 使用Windows Azure更改表,.net,azure,azure-storage,.net,Azure,Azure Storage,我正在使用以下方法在WindowsAzure中创建表。此代码仅在应用程序首次初始化时执行一次 TableStorage.CreateTablesFromModel(typeof(customDataServiceContext), account); 如果我要对表进行更新(例如新列),如何在不丢失现有数据的情况下进行更新?只需更新用于用新字段表示实体的CLR类即可。表服务本身是无模式的,因此它只关心表的名称,即CLR类型的名称 您不需要再次调用CreateTablesFromModel,因为该

我正在使用以下方法在WindowsAzure中创建表。此代码仅在应用程序首次初始化时执行一次

TableStorage.CreateTablesFromModel(typeof(customDataServiceContext), account);

如果我要对表进行更新(例如新列),如何在不丢失现有数据的情况下进行更新?

只需更新用于用新字段表示实体的CLR类即可。表服务本身是无模式的,因此它只关心表的名称,即CLR类型的名称

您不需要再次调用CreateTablesFromModel,因为该表已经存在。但是,如果添加新表,则会添加新表。您的旧表将不受此影响;已经存在的表将被单独保留


检索表中已有的实体将导致新列的值为空。

Rik正确地提到了最重要的概念:Azure表存储没有架构。就存储系统本身而言,如果要更改实体集(表)中存储的内容,则无需执行任何操作。当然,如果您使用不同的模式存储了实体(行),那么您的业务逻辑需要准备好处理这些差异。例如,根据所做的更改,您可能需要处理空值甚至不同的数据类型

因此,系统只需要知道实体集(表)的存在,而不关心它的内容。这就是为什么当您决定更改所存储实体的架构时,不需要调用.CreateTableFromModel

在我看来,Azure用户使用术语“表”来迷惑开发人员,而实际上他们的意思是“实体集”。表通过固定的模式和列引导开发人员走上熟悉的思维道路。你真的应该考虑一个实体集,一个实体容器(属性包)。唯一的强制要求是每个实体必须包含PartitionKey、RowKey和ModifiedDate(?)的属性


最后一个重要的注意事项是,我所说的一切对于云中的实际Azure表存储设施都是正确的。开发人员存储的当前实现是使用实际SQL数据库构建的云的本地模拟。这意味着,在使用开发存储时,将限制您对实体集实际使用固定模式。这是开发存储模拟真实事物的一个明显缺陷,而且很糟糕。

我是否再次调用.CreateTableFromModel函数?因此,您的意思是,我可以在任何时候更改架构时调用它,它不会引发异常或删除现有数据?您只需要在向模型添加新类型时调用CreateTablesFromModel。现有表不会受到影响