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

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

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

最佳答案 您可以使用名为
Sequelize的漂亮框架创建事务范围.

如果您查看相对于
transactions的页面,您可以找到将事务传递给所有查询的方法.

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