播种时未找到“实体”的元数据

问题描述

我正在通过 TypeORM 使用 Faker 构建播种系统,但在播种时出现以下错误

?  TypeORM seeding v1.6.1
✔ ORM Config loaded
✔ Factories are imported
✔ Seeders are imported
✔ Database connected
⠹ Executing createusers Seeder
❌  Could not save entity
EntityMetadatanotFound: No Metadata for "UsersEntity" was found.

✖ Could not run the seed createusers!
Error: Could not save entity

error Command Failed with exit code 1.

我在我的 typeorm-seeding

中使用了 package.json npm 包的 CLI
"seed": "yarn migration:up && cross-env CLI=true ts-node -r tsconfig-paths/register ./node_modules/typeorm-seeding/dist/cli.js ---root src/core/config -n database-configuration.ts seed",

我的 user.factory.ts 使用 users.entity.ts

define(UsersEntity,async (faker: typeof Faker) => {
  const user = new UsersEntity();
  user.firstName = faker.name.firstName();
  user.lastName = faker.name.lastName();
  user.email = faker.internet.email().toLowerCase();
  user.phone = faker.phone.phoneNumber();
  user.imageUrl = faker.image.people();
  user.password = await CryptoUtils.getHash('password');
  user.role = Role.User;
  return user;
});

还有运行播种的 user.seeder.ts

export class createusers implements Seeder {
  public async run(factory: Factory): Promise<any> {
    await factory(UsersEntity)().createMany(10);
  }
}

最后,这是我在 CLI 中用于运行播种的数据库配置

return {
    type: 'postgres',host: process.env.POSTGRES_HOST,port: +process.env.POSTGRES_PORT,username: process.env.POSTGRES_USER,password: process.env.POSTGRES_PASSWORD,database: process.env.POSTGRES_DB,entities:
      process.env.NODE_ENV === 'test'
        ? ['src/**/*.entity.ts']
        : ['dist/**/*.entity{.ts,.js}'],synchronize: false,keepConnectionAlive: true,migrationsRun: true,logging: process.env.DATABASE_SHOW_sql === 'true' || false,migrations:
      process.env.NODE_ENV === 'test'
        ? ['src/core/database/migrations/**/*.ts']
        : ['dist/core/database/migrations/**/*.js'],seeds: ['src/core/database/seed/seeder/**/*{.ts,factories: ['src/core/database/seed/factory/**/*{.ts,cli: {
      migrationsDir: 'src/core/database/migrations',},};

解决方法

我通过在我的 factoriesseeds 文件中添加 NODE_ENV 检查来解决这个问题,以避免在 dist 和 {{1} }.

问题是我在 src 环境中工作。实体是在 development 目录而不是 factoriesseeds 中找到的,它们在 dist 而不是 src 文件夹中找到.

解决方案是对工厂种子应用dist检查:

process.env.NODE_ENV

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...