Travailler avec Azure stockage local de développement via SSMS (studio de gestion de serveur sql)

StackOverflow https://stackoverflow.com/questions/4382001

Question

Je suis en train de écrire du code pour accéder à mon stockage de développement local d'azur. J'ai commencé par la création d'un nouveau stockage pour moi-même:

dsInit /forceCreate

Je peux maintenant voir le DevelopmentStorageDb20090919 dans SSMS avec quelques tables precreated tels que dbo.TableContainer, dbo.TableRow etc.

  1. Maintenant, puis-je ajouter simplement des tables à cette base de données via SSMS (ex. TABLEAU des employés) et commencer à y accéder via le code? Est-ce la bonne façon de faire des choses?

Par exemple:

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

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

2. Et en plus, une fois que je suis tout fait, comment le port I de la table et les données dans le compte cloud réel? Par l'exécution de scripts il?

Était-ce utile?

La solution

Tant que cette table existe, alors oui, le code que vous avez écrit ajoutera « John Doe » à la table des employés. Alors qu'il peut être intéressant d'examiner les données par le biais de SSMS et vous pouvez essayer des données altérant cette façon, je ne recommanderais pas l'essayer. stockage de développement est assez drôle sans piquer avec un bâton. Il existe des différences entre le stockage de dev et stockage en nuage réel, donc j'ai trouvé que plus tôt vous pouvez cesser d'utiliser le stockage dev mieux.

Pour l'instant il n'y a aucun moyen de fantaisie de transfert de données entre les tables Azure (que ce soit dans le stockage dev ou dans le nuage). Il se résume à l'exécution d'une requête qui sélectionne tout de la table source, puis écrit chaque élément individuel à la table de destination. Selon la façon dont vous vos données est partitionné peut-être en mesure de lots les écritures ou vous pourriez être en mesure de les faire en parallèle. Si vous êtes prêt à utiliser l'API REST, vous pouvez directement éviter la bibliothèque de stockage ayant à deserialise chaque élément avant de l'écrire.

Autres conseils

Je pense que vous confondez Azure Table Storage avec SQL Server ou SQL Azure, qui sont complètement différents. Vous ne pouvez pas accéder à des tables Azure stockage du tout avec SSMS. L'exemple de code que vous avez fourni utilise le SDK Azure (qui utilise l'API de stockage REST dessous). C'est le seul moyen d'accès Azure Storage.

Si vous voulez créer / tables de vue d'une manière plus graphique, essayez Cloud Storage studio , ClumsyLeaf AzureXplorer , David Pallman Azure Explorateur de stockage, ou un autre outil similaire. Ces outils reposent tous sur le SDK ou API directe des appels.

Maintenant, en ce qui concerne votre code: Vous devez créer votre table avant d'insérer des objets. Voir CreateTablesFromModel () et CreateTableIfNotExist (). Azure Platform Kit de formation a une grande introduction / laboratoire pour créer et utiliser des tables, et montre comment utiliser CreateTablesFromModel ().

Même si il est préférable d'utiliser les API pour parler au DevStorage, il pourrait y avoir des scénarios où l'accès base de données directe pourrait se révéler bénéfique. Plus précisément, il peut être utilisé pour contourner certains problèmes de SDK qui sont spécifiques à DevStorage.

Une fois, je suis tombé sur un problème avec le renommage de grands blobs - l'opération serait tout simplement expirer (notez que les blobs ne peuvent pas être rebaptisés - ils doivent d'abord être copiés à l'aide CopyFromBlob (), puis supprimé). J'ai essayé à la fois dans Azure Storage Explorer et par l'écriture de code et de plus en plus tous les délais d'attente. Solution? SQL à la rescousse!

Voici un exemple de SQL qui renommer un blob dans un conteneur ou le déplacer vers un autre:

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

Bien sûr, l'utiliser à vos propres risques -. Marque complètement non pris en charge de façon à travailler avec dev stotage

scroll top