Validation Error: Using global entity manager instance methods for context specific actions is disallowed

Validation Error: Using global entity manager instance methods for context specific actions is disallowed

使用 TypeORM 并出现此错误:


ValidationError: Using global EntityManager instance methods for context specific actions is disallowed.
If you need to work with the global instance's identity map, use `allowGlobalContext` configuration option or `fork()` instead

对应的代码如下:


import { MikroORM } from "@mikro-orm/core";
import { __prod__ } from "./constants";
import { Post } from "./entities/Post";
import mikroConfig from "./mikro-orm.config";

const main = async () => {
  const orm = await MikroORM.init(mikroConfig);
  const post = orm.em.create(Post, {
    title: "my first post",
  });
  await orm.em.persistAndFlush(post);
  await orm.em.nativeInsert(Post, { title: "my first post 2" });
};

main().catch((error) => {
  console.error(error);
});

我不确定我需要在哪里使用 .fork() 方法

今天我将 mikrorm 设置从 v4 升级到 v5 时遇到了类似的问题。在做了一些 RnD 之后,我发现以下更改帮助我解决了提到的错误。

  1. 在传递给 MikroORM.init 调用的配置对象中,传递以下 属性

allowGlobalContext: true

  1. 不要直接使用 emcreate 数据库条目。而是使用以下代码
const post = orm.em.fork({}).create(Post, {
    title: "my first post",
  });

以上更改应该可以帮助您修复错误。

我对 MikroORM 也很陌生。所以,我不确定为什么会出现此错误。但我没有根据的猜测是,他们限制访问对全局 EntityManager em 实例的任何更改。

经过一番挖掘,我找到了这个解决方案:

  1. yarn 安装 dotenv

  2. 在项目的根目录中创建一个 .env 文件

  3. 在您的 .env 文件中粘贴以下内容:

MIKRO_ORM_ALLOW_GLOBAL_CONTEXT = true

问题已解决!