C# 通过SSMS(sql server management studio)使用Azure本地开发存储
我正在尝试编写代码以访问azure本地开发存储。我首先为自己创建了一个新的存储:C# 通过SSMS(sql server management studio)使用Azure本地开发存储,c#,azure,azure-storage,azure-table-storage,C#,Azure,Azure Storage,Azure Table Storage,我正在尝试编写代码以访问azure本地开发存储。我首先为自己创建了一个新的存储: dsInit /forceCreate 我现在可以在SSMS中看到DevelopmentStorageDb20090919,其中包含一些预创建的表,如dbo.TableContainer、dbo.TableRow等 现在,我可以简单地通过SSMS(例如Employee table)向这个数据库添加表,并开始通过代码访问它们吗?这样做对吗 例如: var svc = CloudStorageAccount.
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();
二,。此外,一旦我全部完成,我如何将表和数据移植到实际的云帐户中?通过在那里运行脚本?只要该表存在,那么是的,您编写的代码将向employees表中添加“John Doe”。虽然通过SSM查看数据可能很有趣,您可以尝试以这种方式更改数据,但我不建议尝试。开发存储非常有趣,不用棍子戳它。dev存储和实际的云存储之间存在差异,因此我发现越早停止使用dev存储越好
目前还没有在Azure表之间传输数据的奇特方法(无论是在开发人员存储中还是在云中)。它归结为运行一个查询,从源表中选择所有内容,然后将每个单独的项写入目标表。根据数据的分区方式,您可以批处理写操作,也可以并行执行写操作。如果您愿意直接使用REST API,则可以避免存储库在写入每个项之前必须对其进行反序列化。只要该表存在,那么您编写的代码将向employees表中添加“John Doe”。虽然通过SSM查看数据可能很有趣,您可以尝试以这种方式更改数据,但我不建议尝试。开发存储非常有趣,不用棍子戳它。dev存储和实际的云存储之间存在差异,因此我发现越早停止使用dev存储越好
目前还没有在Azure表之间传输数据的奇特方法(无论是在开发人员存储中还是在云中)。它归结为运行一个查询,从源表中选择所有内容,然后将每个单独的项写入目标表。根据数据的分区方式,您可以批处理写操作,也可以并行执行写操作。如果您愿意直接使用REST API,则可以避免存储库在写入每个项之前必须对其进行反序列化。我认为您混淆了Azure表存储与SQL Server或SQL Azure,两者完全不同。您根本无法使用SSM访问Azure存储表。您提供的代码示例使用的是Azure SDK(它使用下面的存储REST API)。这是访问Azure存储的唯一方法 如果您想以更图形化的方式创建/查看表,请尝试使用Cerburata、ClumsyLeaf、David Pallman或其他类似工具。这些工具都依赖于SDK或直接API调用
现在,关于您的代码:您需要在插入对象之前创建表。请参见CreateTableFromModel()和CreateTableIfNotExist()。有一个很好的关于创建和使用表的介绍/实验室,并展示了如何使用CreateTablesFromModel()。我认为您混淆了Azure表存储与SQL Server或SQL Azure,它们是完全不同的。您根本无法使用SSM访问Azure存储表。您提供的代码示例使用的是Azure SDK(它使用下面的存储REST API)。这是访问Azure存储的唯一方法 如果您想以更图形化的方式创建/查看表,请尝试使用Cerburata、ClumsyLeaf、David Pallman或其他类似工具。这些工具都依赖于SDK或直接API调用
现在,关于您的代码:您需要在插入对象之前创建表。请参见CreateTableFromModel()和CreateTableIfNotExist()。对于创建和使用表,有一个很好的介绍/lab,并展示了如何使用CreateTablesFromModel()。尽管最好使用API与DevStorage对话,但在某些情况下,直接访问数据库可能是有益的。更具体地说,它可以用来规避特定于DevStorage的一些SDK问题 我曾经遇到过一个重命名大型Blob的问题—操作将超时(请注意,Blob无法重命名—首先需要使用CopyFromBlob()复制它们,然后将其删除)。我在Azure Storage Explorer中进行了尝试,并编写了代码并增加了所有超时。解决方案救命啊 下面是一个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的方式。尽管最好使用API与DevStorage对话,但在某些情况下,直接访问数据库可能是有益的。更具体地说,它可以用来规避特定于DevStorage的一些SDK问题 我曾经遇到过一个重命名大型Blob的问题—操作将超时(请注意,Blob无法重命名—首先需要使用CopyFromBlob()复制它们,然后将其删除)。我在Azure Storage Explorer中进行了尝试,并编写了代码并增加了所有超时。解决方案救命啊 下面是一个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的方式。还有一个问题——我真的需要一个dsInit'ed数据库来在本地使用吗?难道我不能简单地转到SSMS->右键单击数据库->以我想要的方式创建一个新的数据库,并进行连接到它的所有编码吗?这个