我试图在一个数据库中创建一个表,在另一个数据库中创建另一个表。为此,有两个实体使用 @Entity
装饰工。问题是 typeorm
或者更确切地说 SQL
抛出用户x无法在数据库y中写入的错误。
如何正确处理不同的数据库?
// src/entity/User.ts
import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm'
@Entity({database: 'db1'})
export class User {
@PrimaryGeneratedColumn()
id: number
@Column()
mame: string
}
// src/entity/Movie.ts
import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm'
@Entity({database: 'db2'})
export class Movie {
@PrimaryGeneratedColumn()
id: number
@Column()
title: string
}
连接用适当的凭证装箱:
// src/index.ts
await createConnection({
name: 'connection1',
host: 'SERVER1',
username: 'bob',
password: 'xxx',
type: 'mssql',
database: 'db1',
synchronize: true,
entities: ['src/entity/**/*.ts'],
migrations: ['src/migration/**/*.ts'],
subscribers: ['src/subscriber/**/*.ts'],
cli: {
entitiesDir: 'src/entity',
migrationsDir: 'src/migration',
subscribersDir: 'src/subscriber',
},
})
await createConnection({
name: 'connection2',
host: 'SERVER2',
username: 'mike',
password: 'xxx',
type: 'mssql',
database: 'db2',
synchronize: true,
entities: ['src/entity/**/*.ts'],
migrations: ['src/migration/**/*.ts'],
subscribers: ['src/subscriber/**/*.ts'],
cli: {
entitiesDir: 'src/entity',
migrationsDir: 'src/migration',
subscribersDir: 'src/subscriber',
},
})
我们确实需要与装饰师合作,因为我们也使用 type-graphql
课堂上的讲解员。有趣的是,当entity的decorator留空时,我们会看到在两个数据库中创建的两个表。所以证书是正确的。
我在这里发现了一个类似的问题,并在这里请求帮助。
谢谢你的帮助。
1条答案
按热度按时间d5vmydt91#
我在@aluan的评论中找到了这个答案。以下是其他人遇到这种情况的步骤:
修改数组
entities
因此,每个连接/数据库都有自己的包含实体文件的文件夹,并将最常用的连接命名为default
:为每个数据库在其各自的文件夹中创建实体文件:
src/db1/entity/Fruit.ts
>db1中的表src/db2/entity/Vegetables.ts
>db2中的表与
"synchronize": true
每个表都将在正确的数据库中自动创建访问表中的数据:
对于
default
连接方式:对于非默认连接:
或
我希望这能帮助其他人解决和我一样的问题。