如何解决不允许使用重复的实体名称 - Mikro Orm
我在 Mikro Orm 中为实体创建了迁移。之后,我修改了实体并再次运行迁移。现在 nestjs 一直给我这个错误。
这是我的实体。
@Entity()
export class Task extends BaseEntity<Task,'id'> {
@PrimaryKey()
id: number;
@property()
name: string;
@property()
description: string;
}
我使用 npx mikro-orm migration:create --initial
创建了初始迁移。之后,我将我的实体修改为:
@Entity()
export class Task extends BaseEntity<Task,'id'> {
@PrimaryKey()
id: number;
@property()
name: string;
@property()
description: string;
@Enum(() => TaskStatus)
status: TaskStatus = TaskStatus.OPEN;
}
export enum TaskStatus {
OPEN = 'OPEN',IN_PROGRESS = 'IN_PROGRESS',DONE = 'DONE',}
在那之后,我运行了两个命令 npx mikro-orm migration:create
和 npx mikro-orm migration: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_modules
上可能存在一些问题,其中存在一些不完整/不兼容的软件包。
解决方案是删除 node_modules
并重新安装。
您执行的步骤如下:
- 创建一个任务类
- 创建迁移文件
- 修改任务类
- 重新创建迁移文件
- 进行迁移
如果您之前没有运行迁移命令而修改任务类,那么您最终将使用 create task table 命令获得 2 个迁移文件,因为在任何迁移发生之前,mikro 没有任何任务表的引用。
您可以在两个迁移文件中检查 SQL,它应该是 create table task xxx
。
所以有办法解决:
- 先删除第二个迁移文件
- 运行
npx mikro-orm migration:up
在没有枚举的数据库上创建任务表 - 运行
npx mikro-orm migration:create
。现在,mikro 拥有任务表的引用,并且知道您要更改表,因此迁移中的 SQL 将是
alter table task
而不是create table
- 运行
npx mikro-orm migration:up
以使用枚举更改数据库上的任务表
我也遇到了这个问题,我知道我没有重复的模型名称。问题发生在我将模型移动到其他目录后。
解决方案是清除 dist
构建文件夹和 temp
元数据文件夹。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。