0

Azure で単純なモバイル サービスを構築しようとしていますが、情報の挿入中に問題が発生しています。現在、モデルには User と Car の 2 つのクラスがあります。User には、AccountID、Name (これらすべての文字列)、および Car の配列があります。車には、プレート、色、およびモデル (これらすべての文字列) があります。

User オブジェクトを JSON に正しくシリアル化していますが、request.execute() を実行しようとすると、「プロパティ 'cars' の値はサポートされていないタイプのオブジェクトです」というエラーがスローされます。文字列、数値、ブール値、および日付のみがサポートされていることを知っています。

私がやりたいことは、ユーザー用と車用の 2 つの別個のテーブルを用意し、何らかの方法でそれらの間の関係を確立することです。これは私がこれまでに書いたスクリプトです

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 が車の配列 (JS のオブジェクト) であるためです。ただし、テーブル内でこのユーザーに属する車を見つけるために、ここにある種の ID が必要です。車の「所有者」に何かを追加する必要があるかもしれませんが、よくわかりません。データベースに関する知識がやや貧弱です。

私は何をすべきか?

4

1 に答える 1

0

Azure テーブル ストレージはリレーショナル テーブルをサポートしていません。さらに、ATS は、厳密に型指定された子オブジェクトを親エンティティの一部として格納することをサポートしていません。ATS は、キーと値のエンティティ ベースのテーブル ストレージです。文字列、日付、倍精度、ブール値などの基本的なデータ型のみをサポートしています。

複雑なオブジェクトを ATS (複雑な、他のオブジェクトを含むオブジェクトを意味する) に格納する場合は、データを格納するときに子オブジェクトをオブジェクトではなく文字列としてシリアル化し、処理中に文字列を逆シリアル化してオブジェクトに戻すことをお勧めします。検索。

別の方法として、Row/PartitionKeys を巧みに利用して、Parent オブジェクトと子オブジェクトを同じ PartitionKey 内の異なるエンティティとして格納し、値を読み戻すときに階層を再構築することもできます。

于 2013-02-26T02:46:19.563 に答える