2012-12-31 3 views
1

동일한 실제 Azure 테이블에 여러 엔티티를 저장해야합니다. 파일에서 테이블 항목을 삽입/병합하려고합니다. 나는 실제로 각 속성을 직렬화하거나 해당 항목에 대한 사용자 지정 엔터티를 만드는이 승/O를 할 방법을 찾으려고 노력하고있어.Windows Azure SDK 2.0을 사용하여 Azure 테이블에 삽입/업데이트하는 방법

다음 코드를 시도하는 동안 일반 DynamicTableEntity를 사용할 수 있다고 생각했습니다. 그러나 삽입 작업에서 도움이되는지 잘 모르겠습니다 (대부분의 설명서는 바꾸기/병합 작업 용입니다). 0 출처 = 어떤 도움에 감사드립니다 Microsoft.WindowsAzure.Storage

:

내가 오류가 작동 HRESULT = -2146233088 메시지 = 예기치 않은 응답 코드입니다.

여기 내 코드의 발췌

_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

관련 문제