我有一组微服务,试图将其转换为TypeOrm,并看到一些奇怪的行为。我有一个父类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完全相同,只是在另一个包中存在的父类中创建
答案 0 :(得分:0)
好吧,我想我找到了发生这种情况的原因……以及一个不错的解决方案。负责的代码在这里:https://github.com/typeorm/typeorm/blob/master/src/entity-manager/EntityManager.ts#L790(if (entityRepositoryInstance instanceof Repository) {...}
),我想它失败了,因为它正在针对不同的Repository实例进行检查(因为每个项目都必须导入自己的typeorm)。对我有用的解决方案是只在我的单个项目(负责创建和管理连接的项目)中重新导出typeorm。