我有兩種模式:Status和StatusParameter。狀態'hasMany()'StatusParameter和StatusParameter'belongsTo()'狀態。我想插入一個狀態記錄,然後插入與新狀態關聯的多個StatusParameter實體。我想要將所有的插入包裝在一個事務中。我使用Sequelize 2.0.5,所以這裏是我想出了:Sequelize - 在事務中插入多個關聯實體失敗
return sequelize.transaction(function(t) {
return Status.create({name: 'abc', value: 1 }, {transaction: t}).then(function(instance) {
return sequelize.Promise.all(
[sequelize.models.StatusParameter.create({statusId:instance.id, name: 'myParamName', value:123}, {transaction: t}),
sequelize.models.StatusParameter.create({statusId:instance.id, name: 'myOtherParamName', value:345}, {transaction: t})
]);
});
}).then(function(){
// Automatically comitted at this point if the promise chain returned to the transaction successfully resolved
callback();
}).catch(function(err){
// Automatically rolledback at this point if the promise chain returned to the transaction was rejected
callback(err);
});
執行該代碼段將始終回滾方案得到一個堆棧跟蹤指向方言/ MSSQL/query.js 66行與一個錯誤消息說明:無法讀取屬性'發射'未定義
我不知道爲什麼我得到這個,我看着query.js代碼,但無法確定爲什麼在這種情況下,promise變量未定義,特別是如果我只插入一個新的StatusParameter實體,所有工作正常。它真的當我插入多個關聯的實體時,出現錯誤。
謝謝! Phil
Sequelize最近刪除了事件發射器支持,但它仍然存在於2.0.5中。你有沒有嘗試重新安裝sequelize和依賴關係? –
我的不好,我忘了試試最新的標籤。 2.1.0,它工作得很好。我只需要使用帶有{concurrency:1}而不是Promise.all的Promise.map,因爲單調乏味的抱怨同時執行兩個查詢,稍後會研究它是否可以同時添加它們並獲得一點性能提升。謝謝@jan! –