0

寻求帮助在loopback4中实现事务管理。使用 ms-sql 数据库和 loopback-connector-mssql 作为连接器。

我正在使用 DefaultTransactionalRepository 扩展存储库。

下面是我在控制器中编写的代码。

 1. const addressTransaction = await this.addressRepo.beginTransaction();
 2. const address = await this.addressRepo.create(addressObj); 
 3. addressTransaction.rollback()

问题是,我在第 2 行创建的记录在第 3 行之后没有恢复,也没有错误。我也在第 1 行得到 addressTransaction 对象。以上 3 行只是一个例子。moto 是我想恢复在第 2 行插入的数据。

如果我将下面的代码执行到 DB 中,它工作得很好。记录正在回滚。

BEGIN TRANSACTION
INSERT into addresses(ADDRESS_CITY,ADDRESS_STATE) values('123','1234')
ROLLBACK

但有些连接器无法正常工作。

我检查了 DBA,看起来我们没有在上面的事务中设置implicit_transactions。有谁知道如何设置implicit_transactions。

我执行交易的方式有任何问题吗?好心的帮助

4

1 回答 1

1

要对事务中的操作进行分组,您需要明确地将操作分配给事务。

以下是loopback4 事务支持的官方文档

要在事务中执行创建、检索、更新和删除操作,请将事务对象添加到Options标准 create()、、 update()deleteAll() 等等)方法的参数中。

在您的示例中,您需要执行以下操作:

const addressTransaction = await this.addressRepo.beginTransaction();
const address = await this.addressRepo.create(addressObj, { transaction: addressTransaction}); 
addressTransaction.rollback()
于 2019-11-21T23:49:24.763 回答