TypeORM:在父 class 中创建连接并在子中使用不工作

TypeORM: Creating a connection in a parent class and using in a child not working

我有一组微服务,我正在尝试将其转换为 TypeORM,但我看到了一些奇怪的行为。我有一个处理创建连接的父 class BaseService(为了实现我们需要的多租户,它将管理创建与 Db/Schema 组合的新连接或提供现有连接).连接的创建似乎工作正常:为了比较,我在微服务本身手动创建了一个连接,传入的连接似乎与手动创建的连接相同。但是当使用传入的连接调用 dbConnection.getCustomRepository(...) 时,我得到一个空对象,而使用手动创建的连接调用相同的东西时它工作得很好。关于连接管理的范围界定,有什么我不知道的……你能不能像使用 knex 之类的东西那样传递连接对象?即使我在连接实例上调用 getCustomRepository,它实际上是否在使用全局连接管理器?感谢您提供有关此问题的任何线索。

编辑:只是为了一些更多的代码上下文,以防它有帮助...

这不起作用(widgetRepository 为空):

async getWidgets(dbConnection, query): Promise < Widget[] > {
  const widgetRepository: WidgetRepository = dbConnection.getCustomRepository(
    WidgetRepository
  );
  return widgetRepository.getWidgets();
}

这确实有效:

async getWidgets(dbConnection, query): Promise < Widget[] > {
  const testConnection = await createConnection({
    ...
  }); //inspecting this appears to be identical to dbConnection
  const widgetRepository: WidgetRepository = testConnection.getCustomRepository(
    WidgetRepository
  );
  return widgetRepository.getWidgets();
}

(传入的dbConnection 的创建方式与 testConnection 完全相同,只是存在于另一个包中的父 class 中)

好的,我想我找到了发生这种情况的原因......以及一个不错的解决方案。负责的代码在这里:https://github.com/typeorm/typeorm/blob/master/src/entity-manager/EntityManager.ts#L790 (if (entityRepositoryInstance instanceof Repository) {...}) 我猜它失败了,因为它正在检查存储库的不同实例(因为每个单独的项目都必须导入自己的 typeorm)。对我有用的解决方案是在我的单个项目(负责创建和管理连接的项目)中重新导出 typeorm。