在 MikroORM 中创建迁移时,如何解决“请在 EntityName.id 中提供 'type' 或 'entity' 属性”错误?
Posted
技术标签:
【中文标题】在 MikroORM 中创建迁移时,如何解决“请在 EntityName.id 中提供 \'type\' 或 \'entity\' 属性”错误?【英文标题】:How to resolve "Please provide either 'type' or 'entity' attribute in EntityName.id" error when creating migration in MikroORM?在 MikroORM 中创建迁移时,如何解决“请在 EntityName.id 中提供 'type' 或 'entity' 属性”错误? 【发布时间】:2021-04-03 17:48:01 【问题描述】:我一直在关注 Ben Awad Fullstack 教程,但遇到了一个问题。所以,我已经安装了 MikroORM 并且正在使用 PostgreSQL 数据库。问题是npx mikro-orm migration:create
命令返回如下错误:
Error: Please provide either 'type' or 'entity' attribute in Post.id
at ReflectMetadataProvider.initPropertyType (F:\Web Development\RedditClone\node_modules\@mikro-orm\core\metadata\ReflectMetadataProvider.js:14:19)
at F:\Web Development\RedditClone\node_modules\@mikro-orm\core\metadata\ReflectMetadataProvider.js:9:54
at ReflectMetadataProvider.initProperties (F:\Web Development\RedditClone\node_modules\@mikro-orm\core\metadata\MetadataProvider.js:26:23)
at ReflectMetadataProvider.loadEntityMetadata (F:\Web Development\RedditClone\node_modules\@mikro-orm\core\metadata\ReflectMetadataProvider.js:9:20)
at MetadataDiscovery.discoverEntity (F:\Web Development\RedditClone\node_modules\@mikro-orm\core\metadata\MetadataDiscovery.js:182:41)
at MetadataDiscovery.discoverReferences (F:\Web Development\RedditClone\node_modules\@mikro-orm\core\metadata\MetadataDiscovery.js:131:24)
at MetadataDiscovery.findEntities (F:\Web Development\RedditClone\node_modules\@mikro-orm\core\metadata\MetadataDiscovery.js:71:20)
at MetadataDiscovery.discover (F:\Web Development\RedditClone\node_modules\@mikro-orm\core\metadata\MetadataDiscovery.js:34:9)
at Function.init (F:\Web Development\RedditClone\node_modules\@mikro-orm\core\MikroORM.js:40:24)
我创建了如下所示的 Post 实体:
import Entity, PrimaryKey, Property from "@mikro-orm/core";
@Entity()
export class Post
@PrimaryKey( type: "number" )
id!: number;
@Property()
createdAt = new Date();
@Property( onUpdate: () => new Date() )
updatedAt = new Date();
@Property()
title!: string;
我还为 MikroORM 创建了配置文件,如下所示:
import __prod__ from "./constants";
import Post from "./entities/Post";
import MikroORM from "@mikro-orm/core";
import path from "path";
export default
migrations:
path: path.join(__dirname, "./migrations"),
pattern: /^[\w-]+\d+\.[tj]s$/,
,
entities: [Post],
dbName: "redditclone",
type: "postgresql",
debug: !__prod__,
user: "postgres",
password: "postgres",
as Parameters<typeof MikroORM.init>[0];
所有内容都放在 index.ts 脚本中:
import MikroORM from "@mikro-orm/core";
import __prod__ from "./constants";
import Post from "./entities/Post";
import microConfig from "./mikro-orm.config";
const main = async () =>
const orm = await MikroORM.init(microConfig);
const post = orm.em.create(Post, title: "my first post" );
await orm.em.persistAndFlush(post);
;
main();
我尝试将 Post 实体 id 更改为 uuid 并将相应的对象参数添加到 @PrimaryKey 装饰器,但错误保持不变。 目前我只使用 MikroORM 和 ts-node 依赖项。 提前致谢。
【问题讨论】:
【参考方案1】:这对我有用 - 将类型属性添加到每一列。
import Entity, PrimaryKey, Property from '@mikro-orm/core'
@Entity()
export class Post
@PrimaryKey( type: 'number' )
id!: number
@Property( type: 'date' )
createdAt: Date = new Date()
@Property( type: 'date', onUpdate: () => new Date() )
updatedAt: Date = new Date()
@Property( type: 'text' )
title!: string
【讨论】:
这对我有用。谢谢!【参考方案2】:对我来说,ORM 的配置文件中缺少 metadataProvider
:
// orm.config.ts
import MikroORM from '@mikro-orm/core';
import TsMorphMetadataProvider from '@mikro-orm/reflection';
export default
// ...
metadataProvider: TsMorphMetadataProvider
// ...
as Parameters <typeof MikroORM.init> [0];
【讨论】:
【参考方案3】:其实我已经修好了。看起来打字稿没有正确编译,所以我从 src 文件夹中删除了 Post.js 文件,当我再次编译它时,它似乎按预期工作。
【讨论】:
【参考方案4】:您需要将此行添加到您的索引脚本(到顶部):
import 'reflect-metadata';
(如果您还没有,请将其添加到您的依赖项中)
【讨论】:
我刚刚尝试过,但不幸的是,同样的错误仍然存在。以上是关于在 MikroORM 中创建迁移时,如何解决“请在 EntityName.id 中提供 'type' 或 'entity' 属性”错误?的主要内容,如果未能解决你的问题,请参考以下文章