2024年5月31日发(作者:)

在TypeORM中,事务的实践主要涉及到`EntityManager`和

`TransactionManager`。

1. EntityManager:

* 当你使用`getRepository`或`getManager`方法获取一个实

体管理器时,你可以使用它来执行数据库操作。

* 你可以将多个数据库操作放在一个事务中,通过调用

`transaction`方法。

2. TransactionManager:

* `transaction`方法允许你执行一个或多个数据库操作,并

确保它们作为一个单一的事务运行。如果事务中的任何操作失败,

那么所有操作都会回滚。

* 使用示例:

```typescript

const entityManager = getEntityManager();

ction(async (em) => {

const user = new User();

= 'Test';

await t(user).flush();

// ... 其他的数据库操作 ...

});

```

3. 错误处理:

* 在事务中,如果发生错误,你可以捕获它并决定是否回滚

事务或继续。

* 使用示例:

```typescript

const entityManager = getEntityManager();

try {

await ction(async (em) => {

const user = new User();

= 'Test';

await t(user).flush();

// ... 其他的数据库操作 ...

});

} catch (error) {

(error); // 打印错误信息

// 如果有必要,可以手动回滚事务:

// ck();

}

```

4. 使用TypeORM的连接池:

* TypeORM使用连接池来管理数据库连接。这意味着当你开

始一个事务时,它不会为事务创建一个新的连接,而是从连接池中

获取一个现有的连接。事务完成后,连接返回到连接池。

5. 注意事项:

* 确保在结束事务后关闭连接。这通常通过调用`close`方法完

成,或者确保你的应用程序在结束时关闭所有数据库连接。

* 避免长时间运行的事务,因为它们会锁定数据库资源并可能

影响性能。考虑将长事务分解为多个短事务。

6. 连接和事务隔离级别:

* 你可以配置连接的隔离级别来控制事务如何与其他事务隔离。

这可以在TypeORM的配置中设置。

7. 手动开启和提交事务:

* 你也可以手动开启一个事务,使用`ransaction()`,

然后在完成后使用`()`提交事务。如果你想回滚事务,可

以使用`ck()`。

8. 嵌套事务:

* 在某些数据库中,你可以有嵌套事务。但在TypeORM中,一

旦你开始一个事务,你必须在结束它之前完成所有的数据库操作。

你不能在一个已经开始的事务中再次开始另一个事务。