随着大小的增加,我正试图将我的TypeORM项目分离到多个数据库中,并且它的组件非常离散(但是是相互关联的,所以我需要能够跨数据库的关系)。
我正在尝试使用database
装饰器上的@Entity
设置来完成此操作,如下所述:https://typeorm.io/#multiple-connections/using-multiple-databases-in-a-single-connection
为此,我做了一个最小的可复制示例,在理论上应将两个实体放在不同的数据库中
@Entity({ database: 'test' })
export default class Entity1 {
@PrimaryGeneratedColumn()
id?: number
@Column()
name?: string
@Column()
address?: string
}
和
@Entity({ database: 'database2' })
export default class Entity2 {
@PrimaryGeneratedColumn()
id?: number
@Column()
name?: string
@Column()
address?: string
}
连接代码:
import {createConnections} from "typeorm";
async function doDbExample() {
const connections = await createConnections([{
name: "db1Connection",
type: "postgres",
host: "db",
port: 5432,
username: "test",
password: "testPassword",
database: "test",
entities: [__dirname + "/entity/*{.js,.ts}"],
synchronize: true
}]);
console.log("Created connections")
}
doDbExample()
但是,发生的情况是两个实体的表都放在连接的数据库中。我是在做错什么,还是TypeORM中的错误?在我看来,它不再遵守database
设置。
我正在使用ts-node-dev
答案 0 :(得分:1)
这是设置问题。我是这样解决的:
default
,以使每个连接/数据库都有其自己的包含实体文件的文件夹,并将您最常使用的实体命名为// src/index.ts
await createConnections([
{
name: 'default',
host: 'SERVER1',
username: 'bob',
password: 'kiwi,
type: 'mssql',
database: 'db1',
...
"synchronize": true,
"entities": ["src/db1/entity/**/*.ts"],
},
{
name: 'connection2,
host: 'SERVER2',
username: 'Mike',
password: 'carrot',
type: 'mssql',
database: 'db2,
...
"synchronize": true,
"entities": ["src/db2/entity/**/*.ts"],
])
:src/db1/entity/Fruit.ts
src/db2/entity/Vegetables.ts
>表"synchronize": true
>表使用default
,将在正确的数据库中自动创建每个表
import { Fruit} from 'src/db1/entity/Fruit.ts'
fruits() {
return Fruit.find()
}
连接:: import { getRepository } from 'typeorm'
import { Vegetable} from 'src/db2/entity/Vegetable.ts'
vegetables() {
return async () => await getRepository(Vegetable).find()
}
async vegetables() {
return await getRepository(vegetables, 'connection2').find()
}
或
for x in range(0, len(wordChars) % 2, 2):
char_a = stack[i]
char_b = stack[i + 1]
stack[i] = char_b
stack[i + 1] = char_a
我希望这可以帮助其他与您和我一样遇到同样问题的人。