2012-12-31 79 views
1

我有多個實體存儲在同一個物理Azure表中。我試圖從文件中插入/合併表項。我試圖找到一種方法來做到這一點,沒有真正序列化每個屬性或創建自定義實體的事情。如何使用Windows Azure SDK 2.0插入/更新到Azure表中

在嘗試下面的代碼時,我想也許我可以使用泛型DynamicTableEntity。但是,我不確定它是否有助於插入操作(大多數文檔是用於替換/合併操作)。

我得到的錯誤是 的HResult = -2146233088 消息=意外響應代碼進行操作:0 源= Microsoft.WindowsAzure.Storage

任何幫助理解。

這裏是我的代碼的摘錄

_tableClient = storageAccount.CreateCloudTableClient(); 
      _table = _tableClient.GetTableReference("CloudlyPilot"); 

      _table.CreateIfNotExists(); 


      TableBatchOperation batch = new TableBatchOperation(); 

      .... 

      foreach (var pkGroup in result.Elements("PartitionGroup")) 
      { 

       foreach (var entity in pkGroup.Elements()) 
       { 
        DynamicTableEntity tableEntity = new DynamicTableEntity(); 
        string partitionKey = entity.Elements("PartitionKey").FirstOrDefault().Value; 
        string rowKey = entity.Elements("RowKey").FirstOrDefault().Value; 
        Dictionary<string, EntityProperty> props = new Dictionary<string, EntityProperty>(); 

        //if (pkGroup.Attribute("name").Value == "CloudServices Page") 
        //{ 
        // tableEntity = new CloudServicesGroupEntity (partitionKey, rowKey); 
        //} 
        //else 
        //{ 
        // tableEntity = new CloudServiceDetailsEntity(partitionKey,rowKey); 
        //} 

        foreach (var element in entity.Elements()) 
        { 
         tableEntity.Properties[element.Name.ToString()] = new EntityProperty(element.Value.ToString()); 
        } 

        tableEntity.ETag = Guid.NewGuid().ToString(); 
        tableEntity.Timestamp = new DateTimeOffset(DateTime.Now.ToUniversalTime()); 

        //tableEntity.WriteEntity(/*WHERE TO GET AN OPERATION CONTEXT FROM?*/) 

        batch.InsertOrMerge(tableEntity); 
       } 
       _table.ExecuteBatch(batch); 

       batch.Clear(); 

      } 

回答

3

您是否嘗試過使用DictionaryTableEntity?這個類允許你動態地填充實體,就好像它是一個字典(類似於DynamicTableEntity)。我想是這樣你的代碼,它的工作原理:

 var batch = new TableBatchOperation(); 

     var entity1 = new DictionaryTableEntity(); 
     entity1.PartitionKey = "abc"; 
     entity1.RowKey = Guid.NewGuid().ToString(); 
     entity1.Add("name", "Steve"); 
     batch.InsertOrMerge(entity1); 

     var entity2 = new DictionaryTableEntity(); 
     entity2.PartitionKey = "abc"; 
     entity2.RowKey = Guid.NewGuid().ToString(); 
     entity2.Add("name", "Scott"); 
     batch.InsertOrMerge(entity2); 

     table.ExecuteBatch(batch); 

     var entities = table.ExecuteQuery<DictionaryTableEntity>(new TableQuery<DictionaryTableEntity>()); 

最後一兩件事,我看到你設置的時間戳和ETag自己。刪除這兩行,然後重試。

+0

有趣的是,這兩個代碼庫(DynamicTableEntity以及DictionaryTableEntity)在基於ASP.NET的應用程序上工作,但不在Windows 8上。已打開支持請求。 – user1939211

相關問題