0

我正在尝试在 Azure 上构建一个简单的移动服务,但在插入信息时遇到了一些问题。现在,我的模型中有两个类,用户和汽车。用户有一个 AccountID、一个名称(所有这些字符串)和一个汽车数组。一辆汽车有一个盘子、一个颜色和一个模型(所有这些字符串)。

我正在将 User 对象正确序列化为 JSON,当我尝试执行 request.execute() 时,它会抛出一个错误,提示“属性 'cars' 的值是不支持的对象类型”。我知道只支持字符串、数字、布尔值和日期。

我想做的是有两个单独的表,一个用于用户,另一个用于汽车,并以某种方式在它们之间建立关系。这是我到目前为止写的脚本

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 数组(JS 的对象),但我确实希望在这里有某种 id 来在其表中查找属于该用户的汽车。也许我应该在 Car 的“所有者”中添加一些类型,但我不确定,我对数​​据库的了解有点差。

我应该怎么办?

4

1 回答 1

0

Azure 表存储不支持关系表。此外,ATS 不支持将强类型子对象存储为父实体的一部分。ATS 是一种基于键值实体的表存储。它只支持基本数据类型,如字符串、日期、双精度、布尔值等。

如果要在 ATS 中存储复杂对象(复杂,即包含其他对象的对象),建议在存储数据时将子对象序列化为字符串而不是对象,并在期间将字符串反序列化回对象恢复。

或者,您可以非常喜欢您的 Row/PartitionKeys 并将父对象和子对象存储为同一 PartitionKey 中的不同实体 - 并且在读回值时重建层次结构。

于 2013-02-26T02:46:19.563 回答