node.js:创建一个覆盖多个存储库调用的事务

时间:2016-07-01 18:51:50

标签: sql-server node.js transactions transactionscope

我习惯使用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.");
        });
    });
});

那么,有什么方法可以在服务上创建一个覆盖多个存储库的事务,就像我描述的那样?

1 个答案:

答案 0 :(得分:2)

您可以使用名为Sequelize的漂亮框架创建事务范围。 如果您查看相对于transactions的页面,您可以找到将事务传递给所有查询的方法。

 sequelize.transaction(function (t1) {
   // With CLS enabled, the user will be created inside the transaction
   return User.create({ name: 'Alice' });
 });