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

Dan*_*tos 8 javascript typescript typeorm

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

{
"type": "mysql",
"host": "localhost",
"port": 3306,
"username": "root",
"password": "my-secret-pw",
"database": "mytestdb",
}
Run Code Online (Sandbox Code Playgroud)

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

RepositoryNotFoundError:找不到"myTable"的存储库.看起来这个实体没有在当前的"默认"连接中注册?

当我手动将目录添加到配置文件时找到实体:

{
...
"entities": ["src/bar/entity/**/*.ts"]
}
Run Code Online (Sandbox Code Playgroud)

我的实体定义如下:

@Entity('myTable')
export default class MyTable {
    @PrimaryGeneratedColumn()
    public id: number;
    ...
Run Code Online (Sandbox Code Playgroud)

如何在不在每个目录的配置文件中手动设置的情况下允许TypeORM查找这些实体?

mic*_*czy 13

对我来说,它也有助于将src目录包含到ormconfig.json:

  "entities": [
    "dist/**/*.entity{.ts,.js}",
    "src/**/*.entity{.ts,.js}"
  ],
Run Code Online (Sandbox Code Playgroud)

  • 它在我身上显示了以下错误“SyntaxError:无法在模块外部使用 import 语句” (2认同)

Ris*_*vik 12

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

{
...
"entities": ["src/bar/entities/**/*.ts"]
}
Run Code Online (Sandbox Code Playgroud)

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

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

{
...
"entities": [User, Post]
}
Run Code Online (Sandbox Code Playgroud)

  • 我认为你的意思是“ormconfig.json”不可能只将文件声明为“ormconfig.js”,其中 module.exports 配置对象。http://typeorm.io/#/using-ormconfig/using-ormconfigjs (2认同)

小智 9

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

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