【问题标题】:Validation Error: Using global entity manager instance methods for context specific actions is disallowed验证错误:不允许将全局实体管理器实例方法用于特定于上下文的操作
【发布时间】:2022-02-15 21:12:04
【问题描述】:

使用 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() 方法

【问题讨论】:

  • 感谢您提出这个问题。我也是通过在 YouTube 上观看 Ben Awad 的 Fullstack React GraphQL TypeScript 教程来到这里的。

标签: node.js typescript graphql typeorm


【解决方案1】:

我今天将 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 实例的任何更改的访问。

【讨论】:

  • 干得好,谢谢! :)
【解决方案2】:

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

  1. yarn 安装 dotenv

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

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

MIKRO_ORM_ALLOW_GLOBAL_CONTEXT = true

问题解决了!

【讨论】:

    猜你喜欢
    • 2012-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-27
    • 2017-09-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多