typeorm如何写入不同的数据库?

628mspwn  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(399)

我试图在一个数据库中创建一个表,在另一个数据库中创建另一个表。为此,有两个实体使用 @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留空时,我们会看到在两个数据库中创建的两个表。所以证书是正确的。
我在这里发现了一个类似的问题,并在这里请求帮助。
谢谢你的帮助。

d5vmydt9

d5vmydt91#

我在@aluan的评论中找到了这个答案。以下是其他人遇到这种情况的步骤:
修改数组 entities 因此,每个连接/数据库都有自己的包含实体文件的文件夹,并将最常用的连接命名为 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 >db1中的表 src/db2/entity/Vegetables.ts >db2中的表
"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()
  }

我希望这能帮助其他人解决和我一样的问题。

相关问题