我习惯使用C#进行编码,有时我会创建对不同存储库有多个调用的事务,如果调用失败,则回滚将覆盖每个存储库。
代码是这样的:
using (var scope = new TransactionScope())
{
itemRepository.deleteItems(items);
bookRepository.deleteBooks(books);
scope.Complete();
}
这可确保如果bookRepository上发生错误,则已删除的项目将在回滚中。
现在,我正在尝试使用node.js做同样的事情。 我找到了mssql包,它可以选择创建事务,但只在存储库中,如下所示:
var transaction = new sql.Transaction(/* [connection] */);
transaction.begin(function(err) {
// ... error checks
var request = new sql.Request(transaction);
request.query('insert into mytable (mycolumn) values (12345)', function(err, recordset) {
// ... error checks
transaction.commit(function(err, recordset) {
// ... error checks
console.log("Transaction committed.");
});
});
});
那么,有什么方法可以在服务上创建一个覆盖多个存储库的事务,就像我描述的那样?
答案 0 :(得分:2)
您可以使用名为Sequelize的漂亮框架创建事务范围。 如果您查看相对于transactions的页面,您可以找到将事务传递给所有查询的方法。
sequelize.transaction(function (t1) {
// With CLS enabled, the user will be created inside the transaction
return User.create({ name: 'Alice' });
});