我将TypeORM与休闲配置文件一起使用:ormconfig.json
{
"type": "mysql",
"host": "localhost",
"port": 3306,
"username": "root",
"password": "my-secret-pw",
"database": "mytestdb",
}
“我的实体”文件存储在./src/bar/entity目录中。 我总是收到以下错误:
RepositoryNotFoundError:找不到“ myTable”的存储库。看起来该实体未在当前的“默认”连接中注册?
当我手动将目录添加到配置文件时,找到了实体:
{
...
"entities": ["src/bar/entity/**/*.ts"]
}
我的实体的定义如下:
@Entity('myTable')
export default class MyTable {
@PrimaryGeneratedColumn()
public id: number;
...
如何允许TypeORM查找那些实体而无需在每个目录的配置文件中手动设置?
答案 0 :(得分:6)
您描述的最常见的情况是有一个单独的entities
目录,该目录仅包含实体声明。
{
...
"entities": ["src/bar/entities/**/*.ts"]
}
另一种方法是分别导入每个实体:
import {User} from "./payment/entity/User";
import {Post} from "./blog/entity/Post";
{
...
"entities": [User, Post]
}
答案 1 :(得分:3)
为了在开发环境和生产环境中工作,我必须这样做:
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';
}
答案 2 :(得分:2)
如果您不想将所有实体放在同一位置(即,如果您有模块文件夹,并且想要将实体放置在其关联的模块文件夹中),并且您使用的是{{1}之类的文件命名约定, },foo.entity.ts
等,您可以执行以下操作,它将在源代码树中的任何位置找到所有实体:
foo.service.ts
答案 3 :(得分:2)
对我来说,这有助于将src
目录也包含到ormconfig.json
:
"entities": [
"dist/**/*.entity{.ts,.js}",
"src/**/*.entity{.ts,.js}"
],
答案 4 :(得分:0)
对我来说,答案是
{
...
entities: [join(__dirname, '/../**/**.entity{.ts,.js}')],
}
我在这里找到了例子 https://github.com/nestjs/nest/blob/master/sample/05-sql-typeorm/src/app.module.ts
答案 5 :(得分:-1)
确保实体文件的名称不为复数。例如,如果您要创建帖子实体文件,则该文件不应为“ posts.entity.ts”,而应为“ post.entity.ts”