2013-02-26 136 views
0

我正嘗試在Azure上構建簡單的移動服務,並且在插入我的信息時遇到一些問題。現在,我的模型中有兩個班,User和Car。用戶有一個AccountID,一個Name(所有這些字符串)和一個Car陣列。一輛車有一個盤子,一個顏色和一個模型(所有這些字符串)。Azure表存儲中的對象陣列

我正在將用戶對象正確序列化爲JSON,並且當我嘗試執行request.execute()時,會拋出一個錯誤,指出「屬性'cars'的值是不受支持的類型對象。我知道只有字符串,數字,布爾和日期是suppported。

我想要做的是有兩個單獨的表格,一個用於用戶,另一個用於汽車,並以某種方式建立它們之間的關係。這是我迄今爲止編寫的腳本

function insert(item, user, request) { 
    if(item.accountID !== user.userId){ 
     request.respond(statusCodes.UNAUTHORIZED, 
     "Unauthorized user"); 
    } else { 
     if(item.cars.length){ 
      var tableCars = tables.getTable('cars'); 
      populateTable(tableCars, request, item.cars); 
     } 
     request.execute(); 
    }  
} 

function populateTable(table, request, array){ 
    var index = 0; 

    var insertNext = function(){ 
     if(index < array.length){ 
      var toInsert = array[index]; 
      table.insert(toInsert, { 
       success: function(){ 
        index++; 
        insertNext(); 
       } 
      }); 
     } 
    }; 

    insertNext(); 
} 

在這一點上我有幾個問題。如果我以這種方式離開它,它會崩潰,因爲items.cars是一個Car的Array(一個JS對象),但我確實想在這裏找到某種id來查找屬於該用戶的汽車。也許我應該給Car加上一些「所有者」,但我不確定,我對數​​據庫的瞭解還是很差。

我該怎麼辦?

回答

0

Azure表存儲不支持關係表。此外,ATS不支持將強類型的子對象存儲爲父實體的一部分。 ATS是基於關鍵值實體的表格存儲。它僅支持字符串,日期,雙精度,布爾等基本數據類型。

如果要將複雜對象存儲在ATS中(複雜的含義是包含其他對象的對象),建議您應該序列化子對象對象作爲字符串,而不是對象,當存儲數據時,並在檢索過程中將字符串反序列化爲對象。

或者,您可以非常喜歡Row/PartitionKeys,並將Parent對象和子對象作爲不同實體存儲在同一個PartitionKey中 - 並且在讀取值時,重構層次結構。

+0

我一直在研究關於Partition/RowKeys的一整天,你是對的,這就是我想要的,但我沒有找到關於如何設置它們的代碼,只有關於人們詢問如何編輯它們的代碼,以及如果它是可能的 – 2013-02-27 00:58:37