使用Dexie应该bulkPut将标识主键值分配给正在保存的对象put()吗?

时间:2017-06-19 17:05:48

标签: indexeddb dexie

我使用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,人们会怎么做?

1 个答案:

答案 0 :(得分:0)

从未记录过put()和add()中给定对象的主键分配,并且可以进行更改。我理解人们会期望bulkPut()的行为方式相同,但是由于批量方法不会监听每个单独操作的成功事件而只会听取最后一个操作,因此它会产生很大的性能成本。如果所有对象在添加时缺少主键并且表的主键自动递增,则可以计算ID。如果你混合使用其中一些主键设置而另一些没有,则必须将put操作拆分为两个数组 - 一个bulkPut()项目中有主键,另一个(同样可以)好吧是一个bulkAdd()),它添加了缺少主键的项目。 ID可以通过从最后一个插入ID中的每一个中减去1来计算。