2017-06-19 13 views
0

私はIndexedDBを扱うためにDexieを使用しています。私が使用しています:Dexieでは、put()と同じ方法で、保存されているオブジェクトにIDの主キー値をbulkPutで割り当てる必要がありますか?

db.version(1).stores({ 
    activities: '++LocalActivityId' 
}); 

をPK LocalActivityIdが自動的に割り当て/インクリメント持っています。私はを入れて使用し

db.activities.put(activity).then(function(newId){ 
    // don't even need to use "newId", the value is already assigned to my object 
    console.log("This will have the new LocalActivityId " + activity.LocalActivityId); 
}); 

それは、データベースから新しい値で、私のオブジェクトにLocalActivityIdを割り当てますが、私はbulkPutをしようとすると、それはこれを行いません。

db.activities.bulkPut(activities).then(function (lastKey) { 
    console.log("There is nothing here: " + activities[0].LocalActivityId); 
}); 

bulkPutは最後の新しいIDだけを返すので、挿入されたばかりのすべてのオブジェクトのIDを簡単に取得する方法はありません。

これは予期された動作ですか?

これが予想される場合、オブジェクトの一括挿入を実行しようとしていて、それらのオブジェクトに割り当てられた新しいIDを知る必要がある場合、ユーザーはどうしますか?

答えて

0

put()およびadd()の指定されたオブジェクトへの主キーの割り当ては文書化されておらず、変更の対象です。 bulkPut()も同じように動作すると期待していますが、バルクメソッドは個々の操作の成功イベントをリッスンするのではなく、最後のものだけを受信するため、パフォーマンスが大幅に低下します。すべてのオブジェクトにプライマリキーがなく、追加されていてテーブルのプライマリキーが自動インクリメントされている場合でも、IDは計算できます。主キーがあるものとそうでないものが混在している場合は、オブジェクトに主キーを持つ項目のbulkPut()と、主キーを持たない項目を追加するbulkAdd()もあります。 IDは、前に挿入されたIDのそれぞれから1を引いて計算することができます。

関連する問題