1

我正在尝试编写代码来访问我的天蓝色本地开发存储。我首先为自己创建了一个新存储:

dsInit /forceCreate

我现在可以在 SSMS 中看到 DevelopmentStorageDb20090919 以及一些预先创建的表,例如 dbo.TableContainer、dbo.TableRow 等。

  1. 现在,我可以简单地通过 SSMS(例如 Employee 表)将表添加到该数据库并开始通过代码访问它们吗?这是做事的正确方法吗?

例如:

    var svc = CloudStorageAccount.DevelopmentStorageAccount
.CreateCloudTableClient().GetDataServiceContext();

                //"Employees" is the name of the table                
                svc.AddObject("Employees", new Employees("John Doe"));    
                svc.SaveChangesWithRetries();

2. 另外,一旦我完成了,我如何将表格和数据移植到实际的云帐户中?通过在那里运行脚本?

4

3 回答 3

1

我认为您将 Azure 表存储与完全不同的 SQL Server 或 SQL Azure 混淆了。您根本无法使用 SSMS 访问 Azure 存储表。您提供的代码示例使用 Azure SDK(它使用下面的存储 REST API)。这是访问 Azure 存储的唯一方法。

如果您想以更图形化的方式创建/查看表,请尝试 Cerebrata 的Cloud Storage Studio、ClumsyLeaf 的AzureXplorer、David Pallman 的Azure Storage Explorer或其他类似工具。这些工具都依赖于 SDK 或直接 API 调用。

现在,关于您的代码:您需要在插入对象之前创建表。请参阅 CreateTablesFromModel() 和 CreateTableIfNotExist()。Azure 平台培训工具包有一个很棒的介绍/实验室,用于创建和使用表,并展示了如何使用 CreateTablesFromModel()。

于 2010-12-08T02:16:15.417 回答
0

只要该表存在,那么是的,您编写的代码会将“John Doe”添加到员工表中。虽然通过 SSMS 查看数据可能很有趣,并且您可以尝试以这种方式更改数据,但我不建议您尝试。开发存储足够有趣,无需用棍子戳它。开发存储和实际的云存储之间存在差异,所以我发现越早停止使用开发存储越好。

目前没有在 Azure 表之间传输数据的奇特方式(无论是在开发存储中还是在云中)。它归结为运行一个查询,从源表中选择所有内容,然后将每个单独的项目写入目标表。根据数据的分区方式,您可能能够批量写入,或者您可能能够并行执行它们。如果您愿意直接使用 REST API,您可以避免存储库必须在写入每个项目之前对其进行反序列化。

于 2010-12-07T23:21:03.503 回答
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 的方式。

于 2012-01-24T22:08:10.173 回答