如果未在配置文件中设置实体目录,则 TypeORM 无法找到实体

TypeORM cannot find entities if entity directory was not set in configuration files

我正在使用带有休闲配置文件的 TypeORM:ormconfig.json

{
"type": "mysql",
"host": "localhost",
"port": 3306,
"username": "root",
"password": "my-secret-pw",
"database": "mytestdb",
}

我的实体文件存储在 ./src/bar/entity 目录中。 我总是收到以下错误:

RepositoryNotFoundError: No repository for "myTable" was found. Looks like this entity is not registered in current "default" connection?

手动添加目录到配置文件时发现Entity:

{
...
"entities": ["src/bar/entity/**/*.ts"]
}

我的实体定义如下:

@Entity('myTable')
export default class MyTable {
    @PrimaryGeneratedColumn()
    public id: number;
    ...

如何在不在每个目录的配置文件中手动设置的情况下让 TypeORM 找到那些实体?

您描述的最常见情况是有单独的 entities 目录,其中仅包含实体声明。

{
...
"entities": ["src/bar/entities/**/*.ts"]
}

另一种方法是分别导入每个实体:

import {User} from "./payment/entity/User";
import {Post} from "./blog/entity/Post";

{
...
"entities": [User, Post]
}

如果您不想将所有实体放在同一个地方(即,如果您有模块文件夹并想将实体放在它们关联的模块文件夹中),并且如果您使用的文件命名约定如 foo.entity.tsfoo.service.ts 等,然后您可以执行以下操作,它会找到源代码树中任何位置的所有实体:

{
  ...
  "entities": ["src/**/*{.entity.ts}"],
}

对我来说答案是 { ... entities: [join(__dirname, '/../**/**.entity{.ts,.js}')], }

我在这里找到了例子 https://github.com/nestjs/nest/blob/master/sample/05-sql-typeorm/src/app.module.ts

对我来说,将 src 目录包含到 ormconfig.json:

也很有帮助
  "entities": [
    "dist/**/*.entity{.ts,.js}",
    "src/**/*.entity{.ts,.js}"
  ],

为了在开发和生产环境中工作,使用 Nest.js,我必须这样做:

entities: [
   this.isProduction() ? 
       path.join(__dirname, '../**/**.entity{.ts,.js}') : '**/*.entity{.ts,.js}',
],

// ....

private isProduction(): boolean {
    const mode = this.configService.get('NODE_ENV');
    return mode !== 'development';
}

确保实体文件的名称不是复数。例如,如果您正在创建一个 post 实体文件,它不应该是“posts.entity.ts”,而应该是“post.entity.ts”

我的问题是我的用户实体文件是小写的,当我将它大写时 - 一切正常。