首页 > 解决方案 > 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;});

标签: connectionentitytypeorm

解决方案


类型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,findAndCountinsert

如果您找到任何其他解决方案,请告诉我。


推荐阅读