【问题标题】:Working with Azure local Development Storage via SSMS (sql server management studio)通过 SSMS(sql server management studio)使用 Azure 本地开发存储
【发布时间】:2011-05-21 21:16:53
【问题描述】:

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

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

【问题讨论】:

    标签: c# azure azure-storage azure-table-storage


    【解决方案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 Platform Training Kit 有一个很棒的介绍/实验室,用于创建和使用表,并展示了如何使用 CreateTablesFromModel()。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 再问一个问题 - 我真的需要一个 dsInit'ed 数据库在本地使用吗?我不能简单地转到 SSMS->右键单击数据库->按照我想要的方式创建一个新数据库并完成我所有的编码连接到它吗?然后当我完成后,只需在 sql-azure 上运行导出的 sql 脚本?如果是这样,这个 dsInit 的开发存储有什么用?
      • 查看我的答案 - Azure 存储和 SQL 完全不同。 dsinit 只是在本地 SQL Server(或 SQL Express)中创建表来“模拟”表存储。在 Azure 本身中,它根本不依赖 SQL Server。
      【解决方案3】:

      尽管最好使用 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
      

      当然,使用它需要您自担风险 - 这是一种完全不受支持的使用开发存储的方式。

      【讨论】:

        猜你喜欢
        • 2020-08-07
        • 2012-08-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多