Nestjs 不允许重复的实体名称-Mikro Orm
我在Mikro Orm中为一个实体创建了一个迁移。之后,我修改了实体并再次运行迁移。现在nestjs一直给我这个错误Nestjs 不允许重复的实体名称-Mikro Orm,nestjs,mikro-orm,Nestjs,Mikro Orm,我在Mikro Orm中为一个实体创建了一个迁移。之后,我修改了实体并再次运行迁移。现在nestjs一直给我这个错误 [Nest] 13528 - 02/06/2021, 6:59:14 pm [NestFactory] Starting Nest application... [Nest] 13528 - 02/06/2021, 6:59:14 pm [InstanceLoader] MikroOrmModule dependencies initialized +43ms
[Nest] 13528 - 02/06/2021, 6:59:14 pm [NestFactory] Starting Nest application...
[Nest] 13528 - 02/06/2021, 6:59:14 pm [InstanceLoader] MikroOrmModule dependencies initialized +43ms
[Nest] 13528 - 02/06/2021, 6:59:14 pm [InstanceLoader] ConfigHostModule dependencies initialized +1ms
[Nest] 13528 - 02/06/2021, 6:59:14 pm [InstanceLoader] AppModule dependencies initialized +1ms
[Nest] 13528 - 02/06/2021, 6:59:14 pm [InstanceLoader] ConfigModule dependencies initialized +0ms
[Nest] 13528 - 02/06/2021, 6:59:14 pm [ExceptionHandler] Duplicate entity names are not allowed: Task +409ms
MetadataError: Duplicate entity names are not allowed: Task
at Function.duplicateEntityDiscovered (C:\dev\nodejs\nestjs\sandbox\node_modules\@mikro-orm\core\errors.js:151:16) at MetadataValidator.validateDiscovered (C:\dev\nodejs\nestjs\sandbox\node_modules\@mikro-orm\core\metadata\MetadataValidator.js:40:42)
at MetadataDiscovery.findEntities (C:\dev\nodejs\nestjs\sandbox\node_modules\@mikro-orm\core\metadata\MetadataDiscovery.js:81:24)
at processTicksAndRejections (node:internal/process/task_queues:93:5)
at async MetadataDiscovery.discover (C:\dev\nodejs\nestjs\sandbox\node_modules\@mikro-orm\core\metadata\MetadataDiscovery.js:34:9)
at async Function.init (C:\dev\nodejs\nestjs\sandbox\node_modules\@mikro-orm\core\MikroORM.js:42:24)
at async Injector.instantiateClass (C:\dev\nodejs\nestjs\sandbox\node_modules\@nestjs\core\injector\injector.js:290:37)
at async callback (C:\dev\nodejs\nestjs\sandbox\node_modules\@nestjs\core\injector\injector.js:42:30)
at async Injector.resolveConstructorParams (C:\dev\nodejs\nestjs\sandbox\node_modules\@nestjs\core\injector\injector.js:114:24)
at async Injector.loadInstance (C:\dev\nodejs\nestjs\sandbox\node_modules\@nestjs\core\injector\injector.js:46:9)
这是我的实体
@Entity()
export class Task extends BaseEntity<Task, 'id'> {
@PrimaryKey()
id: number;
@Property()
name: string;
@Property()
description: string;
}
在那之后,我运行了两个命令npxmikroormmigration:create
和npxmikroormmigration:up
。
现在NestJs一直给我这个错误
[Nest] 13528 - 02/06/2021, 6:59:14 pm [NestFactory] Starting Nest application...
[Nest] 13528 - 02/06/2021, 6:59:14 pm [InstanceLoader] MikroOrmModule dependencies initialized +43ms
[Nest] 13528 - 02/06/2021, 6:59:14 pm [InstanceLoader] ConfigHostModule dependencies initialized +1ms
[Nest] 13528 - 02/06/2021, 6:59:14 pm [InstanceLoader] AppModule dependencies initialized +1ms
[Nest] 13528 - 02/06/2021, 6:59:14 pm [InstanceLoader] ConfigModule dependencies initialized +0ms
[Nest] 13528 - 02/06/2021, 6:59:14 pm [ExceptionHandler] Duplicate entity names are not allowed: Task +409ms
MetadataError: Duplicate entity names are not allowed: Task
at Function.duplicateEntityDiscovered (C:\dev\nodejs\nestjs\sandbox\node_modules\@mikro-orm\core\errors.js:151:16) at MetadataValidator.validateDiscovered (C:\dev\nodejs\nestjs\sandbox\node_modules\@mikro-orm\core\metadata\MetadataValidator.js:40:42)
at MetadataDiscovery.findEntities (C:\dev\nodejs\nestjs\sandbox\node_modules\@mikro-orm\core\metadata\MetadataDiscovery.js:81:24)
at processTicksAndRejections (node:internal/process/task_queues:93:5)
at async MetadataDiscovery.discover (C:\dev\nodejs\nestjs\sandbox\node_modules\@mikro-orm\core\metadata\MetadataDiscovery.js:34:9)
at async Function.init (C:\dev\nodejs\nestjs\sandbox\node_modules\@mikro-orm\core\MikroORM.js:42:24)
at async Injector.instantiateClass (C:\dev\nodejs\nestjs\sandbox\node_modules\@nestjs\core\injector\injector.js:290:37)
at async callback (C:\dev\nodejs\nestjs\sandbox\node_modules\@nestjs\core\injector\injector.js:42:30)
at async Injector.resolveConstructorParams (C:\dev\nodejs\nestjs\sandbox\node_modules\@nestjs\core\injector\injector.js:114:24)
at async Injector.loadInstance (C:\dev\nodejs\nestjs\sandbox\node_modules\@nestjs\core\injector\injector.js:46:9)
更新 经过调查,代码可以完美运行。
节点_模块上可能存在一些问题,其中存在一些不完整/不兼容的包
解决方案是卸下node\u模块
,然后重新安装
您执行的步骤如下所示:
创建一个任务类
创建迁移文件
修改任务类
再次创建迁移文件
迁移
如果您在没有运行迁移命令的情况下修改了任务类,那么在执行任何迁移之前,mikro没有任务表的任何引用,因此使用create Task table命令将得到2个迁移文件
您可以在两个迁移文件中检查SQL,它应该是createtabletask xxx
因此,有一种解决方法:
- 首先删除第二个迁移文件
- 运行
npx mikro orm migration:up
在没有枚举的数据库上创建任务表
- 运行npx mikro orm迁移:创建
。
现在,mikro有任务表的引用,并且知道您想要更改表,所以迁移中的SQL将是altertable task
,而不是create table
npx mikro orm migration:up
以使用enum更改数据库上的任务表- 我也有这个问题,我知道我没有重复的型号名称。问题发生在我将模型移动到其他目录后
解决方案是清除
dist
构建文件夹和temp
元数据文件夹。迁移不是问题。在最后一次迁移之前,我应用了以前的迁移,甚至将数据插入到数据库中。但是您能否确认迁移文件正在使用altertable
SQL而不是createtable
?我已经检查了数据库,它正在使用altertable命令。数据库中的表有taskStatus列,甚至包含以前的数据。我甚至运行了npx mikro orm migration:pending命令来检查是否有任何迁移处于挂起状态,但它表示没有任何迁移处于挂起状态,所以您的意思是可以成功应用更改,但仍然显示不允许重复的实体名称:Task
错误?嘿,谢谢您签出我的代码。我删除了我的node\u模块
和dist
文件夹。然后它开始告诉我错误,它找不到mikro orm.config.js
。因此,我将它的新路径更新为/dist/src/mikro orm.config.js
,代码现在开始工作。再次感谢你帮助我。您应该编辑您的答案,以便我可以将其标记为已回答。