node.js: 创建一个涵盖对多个存储库的调用的事务
node.js: Creating a transaction that covers calls to more than one repository
我习惯使用 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' });
});
我习惯使用 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' });
});