Sql server node.js:创建包含对多个存储库的调用的事务

Sql server node.js:创建包含对多个存储库的调用的事务,sql-server,node.js,transactions,transactionscope,Sql Server,Node.js,Transactions,Transactionscope,我习惯于使用C#编写代码,有时我创建的事务有多个对不同存储库的调用,如果一个调用失败,回滚将覆盖每个存储库 代码如下所示: using (var scope = new TransactionScope()) { itemRepository.deleteItems(items); bookRepository.deleteBooks(books); scope.Complete(); } var transaction = new sql.Transaction(/*

我习惯于使用C#编写代码,有时我创建的事务有多个对不同存储库的调用,如果一个调用失败,回滚将覆盖每个存储库

代码如下所示:

using (var scope = new TransactionScope())
{
    itemRepository.deleteItems(items);
    bookRepository.deleteBooks(books);
    scope.Complete();
}
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.");
        });
    });
});
这样可以确保,如果bookRepository发生错误,则已删除的项目将回滚

现在,我正尝试使用node.js做同样的事情。 我找到了一个可以选择创建事务的包,但只在存储库中找到,如下所示:

using (var scope = new TransactionScope())
{
    itemRepository.deleteItems(items);
    bookRepository.deleteBooks(books);
    scope.Complete();
}
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.transaction(function (t1) {
   // With CLS enabled, the user will be created inside the transaction
   return User.create({ name: 'Alice' });
 });

我正在为mysql+节点寻找类似的答案