connection - TypeORM @entity 基于连接名的动态名称
问题描述
我试图为用户表只定义一个实体,但由于我使用多个数据库(应用程序启动时没有连接),我需要提供一种在建立连接时更改 @entity({name}) 的方法(用户表有不同的名称,具体取决于数据库)。此外,如果有一种方法可以在连接时而不是更早地导入实体,那就太好了。至少有可能吗?
对于实体,我有这样的东西:
function setEntityName(){
//how to pass connection name here?
return 'current_table_name';
}
@Entity({name:setEntityName()})
export class userSchema {
//...
连接在另一个模块中初始化,如下所示:
const connection = await createConnection(connObj).then(connection => {
console.log("Connected to " + connObj.name);
return connection;
}).catch(error => {console.log("TypeORM connection error: ", error); return false;});
解决方案
类型ORM MongoDB
我也在为同样的问题而苦苦挣扎,这是我的 hack
创建与您的动态集合相同的实体
@Entity()
export class Sample {
...
}
将此实体添加到您的连接中。
const connection: Connection = await createConnection({
...
entities: [Sample]
});
在进行查询之前使用示例存储库并更改 tableName
const repository = getRepository(Sample);
repository.metadata.tableName = "dynamic";
const data = await repository.find();
// returns result from the dynamic collection instead of sample
PS:我只测试了一些操作,例如find
,findAndCount
和insert
如果您找到任何其他解决方案,请告诉我。
推荐阅读
- c# - 将 UWP C# 应用程序连接到 Azure SQL 数据库 MFA?
- proxy - 即时使用 wget 代理
- ios - Swift - 以编程方式向 UITextfield 添加清除按钮
- r - 尝试将矩阵的值相乘以获得另一个新矩阵,“要替换的项目数不是替换长度的倍数”中的错误
- javascript - 同一页面上有多个javascript?
- javascript - 在 React 中成功发布请求后重定向的正确方法是什么?
- java - 如何将 Stream 转换为 Iterable?
- android - Android Studio 资产文件夹丢失
- ruby-on-rails - 使用设计登录将图像按钮更改为文本按钮
- ethernet - 以太网:根据目的地址接受和丢弃消息