TypeORM使用命名连接时报错Connection "default" was not found怎么办
报错核心原因
- TypeORM 实体自带的静态操作方法(
findOne、find、save等)默认绑定名为default的连接,这是框架的内置默认规则,和你是否在命名连接中注册了实体没有关联。 - 你在创建
usercontext命名连接时传入的entities参数,仅完成了实体到该命名连接的注册映射,并没有修改实体静态方法的默认连接指向,因此调用实体静态方法时还是会尝试查找不存在的default连接,触发报错。
多命名连接场景的正确使用方案
两种常用实现方式,可根据项目场景选择:
- 方式1:通过命名连接实例操作实体(适合实体可能归属多个连接的灵活场景)
先获取指定命名连接,再通过连接获取对应实体的仓库实例进行操作:
import { getConnection } from "typeorm"; // 获取usercontext命名连接实例 const userContextConn = getConnection("usercontext"); // 通过连接实例操作实体 const targetUser = await userContextConn.getRepository(UserEntity).findOne({ id: xxx });
- 方式2:给实体固定绑定指定连接(适合实体固定归属某一个数据库的场景)
可以通过实体装饰器配置,或者全局调用useConnection方法绑定:
// 方案A:在@Entity装饰器中直接指定绑定的连接名 @Entity({ connectionName: "usercontext" }) export class UserEntity { // 实体属性定义 } // 方案B:全局调用一次useConnection方法绑定 UserEntity.useConnection("usercontext");
注意:如果你使用的是TypeORM 0.3.x及以上版本,原createConnection、getConnectionAPI已被废弃,需改用DataSource初始化连接,调用对应DataSource实例的getRepository方法操作实体即可,逻辑完全一致。
内容的提问来源于stack exchange,提问作者Oneb
相关产品推荐
相关产品推荐

