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。
我有一组微服务,我正在尝试将其转换为 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。