0

我正在使用 Dexie 来处理 IndexedDB。我在用着:

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

让 PK LocalActivityId 自动递增/分配。

当我使用put时:

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,他们会怎么做?

4

1 回答 1

0

从未记录在 put() 和 add() 中将主键分配给给定对象,并且可能会更改。我知道人们会期望 bulkPut() 的行为方式相同,但这会带来巨大的性能成本,因为批量方法不会监听每个单独操作的成功事件,而只会监听最后一个操作。如果所有对象在添加时都缺少主键并且表的主键是自动递增的,则可以计算 ID。如果您将其中一些设置了主键而一些没有设置的混合中,您将不得不将 put 操作拆分为两个数组 - 一个 bulkPut() 的项目在其对象中具有主键,另一个(同样可以很可能是一个添加缺少主键的项目的 bulkAdd())。身份证'

于 2017-06-19T20:32:36.857 回答