2010-12-07 100 views
1

我正在尝试编写代码来访问我的azure本地开发存储。我开始通过创建自己的新存储:通过SSMS使用Azure本地开发存储(sql server management studio)

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。另外,一旦我完成了所有工作,我该如何将表格和数据移植到实际的云账户中?通过在那里运行脚本?

回答

0

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

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

+0

还有一个问题 - 我真的需要一个dsInit的数据库来与本地工作吗?我不能简单地去SSMS->右键点击数据库 - >以我想要的方式创建一个新的数据库,并执行我所有的编码连接到它?然后当我完成所有工作时,只需在sql-azure上运行导出的sql脚本?如果是这样,这个dsInit'ed dev存储的用途是什么? – DeeStackOverflow 2010-12-07 23:31:29

+0

查看我的答案 - Azure存储和SQL完全不同。 dsinit只需在本地SQL Server(或SQL Express)中创建表以“模拟”表存储。在Azure本身中,它根本不依赖于SQL Server。 – 2010-12-08 02:18:33

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()。

0

即使最好使用API​​与DevStorage对话,也可能会出现直接访问数据库可能有用的情况。更具体地说,它可以用来规避特定于DevStorage的一些SDK问题。

我曾遇到重命名大块的问题 - 操作会超时(请注意,块不能重命名 - 它们首先需要使用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一起工作的方式。

相关问题