我正在尝试编写代码来访问我的azure本地开发存储。我开始为自己创建一个新的存储空间:
dsInit /forceCreate
我现在可以在SSMS中看到带有一些预先创建的表格的DevelopmentStorageDb20090919,例如dbo.TableContainer,dbo.TableRow等。
例如:
var svc = CloudStorageAccount.DevelopmentStorageAccount
.CreateCloudTableClient().GetDataServiceContext();
//"Employees" is the name of the table
svc.AddObject("Employees", new Employees("John Doe"));
svc.SaveChangesWithRetries();
2。此外,一旦完成,我如何将表和数据移植到实际的云帐户?通过在那里运行脚本?
答案 0 :(得分:1)
我认为您将Azure表存储与SQL Server或SQL Azure混淆,这两者完全不同。您无法使用SSMS访问Azure存储表。您提供的代码示例使用的是Azure SDK(使用下面的Storage REST API)。这是访问Azure存储的唯一方法。
如果您想以更加图形化的方式创建/查看表格,请尝试使用Cerebrata的Cloud Storage Studio,ClumsyLeaf的AzureXplorer,David Pallman的Azure Storage Explorer或其他类似的工具。这些工具都依赖于SDK或直接API调用。
现在,关于您的代码:您需要在插入对象之前创建表。请参见CreateTablesFromModel()和CreateTableIfNotExist()。 Azure Platform Training Kit有一个很好的介绍/实验用于创建和使用表,并展示了如何使用CreateTablesFromModel()。
答案 1 :(得分:0)
只要该表存在,那么是的,您编写的代码会将“John Doe”添加到employees表中。虽然通过SSMS查看数据可能很有趣,但您可以尝试以这种方式更改数据,但我不建议您尝试使用它。开发存储很有趣,没有用棍子戳它。开发存储和实际云存储之间存在差异,因此我发现越早停止使用开发存储就越好。
目前,在Azure表之间没有花哨的数据传输方式(无论是在dev存储中还是在云中)。它归结为运行一个查询,从源表中选择所有内容,然后将每个项目写入目标表。根据数据的分区方式,您可以批量写入,也可以并行执行。如果您愿意直接使用REST API,则可以避免存储库在编写之前对每个项目进行反序列化。
答案 2 :(得分:0)
尽管最好使用API与DevStorage交谈,但可能存在直接数据库访问可能有益的情况。更具体地说,它可以用来规避某些特定于DevStorage的SDK问题。
我曾经遇到过重命名大blob的问题 - 操作只会超时(注意blob无法重命名 - 首先需要使用CopyFromBlob()复制它们然后删除)。我在Azure存储资源管理器中尝试了两种方法,并编写了代码并增加了所有超时。解? SQL救援!
以下是一个SQL示例,它将重命名容器中的blob或将其移动到另一个容器中:
begin tran
alter table CommittedBlock nocheck constraint BlockBlob_CommittedBlock
update CommittedBlock set BlobName = @TargetBlobName, ContainerName = @TargetContainerName where BlobName = @SourceBlobName and ContainerName = @SourceContainerName
update BlockData set BlobName = @TargetBlobName, ContainerName = @TargetContainerName where BlobName = @SourceBlobName and ContainerName = @SourceContainerName
update Blob set BlobName = @TargetBlobName, ContainerName = @TargetContainerName where BlobName = @SourceBlobName and ContainerName = @SourceContainerName
alter table CommittedBlock with check check constraint BlockBlob_CommittedBlock
rollback tran
当然,使用它需要您自担风险 - 这是完全不支持使用dev stotage的方式。