首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用type-graphql由mikro-orm缓存数据

使用type-graphql由mikro-orm缓存数据
EN

Stack Overflow用户
提问于 2020-10-27 15:56:42
回答 1查看 421关注 0票数 0

我正在尝试mikro-orm,所以我做了一个简单的CRUD解析器,但是我从graphql调试控制台中看到,在删除之后,如下所示:

代码语言:javascript
复制
mutation{
  deleteItem(id:9)
}

具有以下代码

代码语言:javascript
复制
 @Mutation(() => Boolean)
 async deleteItem(@Arg('id') id: number, @Ctx() { em }: MyContext): Promise<boolean> {
   try {
     await em.nativeDelete(Item, { id });
     return true;
   } catch (error) {
     console.log(error);
     return false;
   }
 }

预期的反应是可以的。

但是,如果我试图编辑已删除的项目,编辑的项目是returned...even,而mikro-orm缓存禁用了cache: { enabled: false },,错误在哪里?我需要强迫同花顺吗?

这是editItem解析器:

代码语言:javascript
复制
  @Mutation(() => Item, { nullable: true })
  async editItem(
    @Arg('id') id: number,
    @Arg('data', () => String, { nullable: true }) data: string,
    @Ctx() { em }: MyContext
  ): Promise<Item | null> {
    const item = await em.findOne(Item, { id });
    if (!item) {
      return null;
    }
    console.log(item);
    if (typeof data !== 'undefined') {
      post.data = data;
      await em.persistAndFlush(item);
    }
    return item;
  }

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-27 16:07:26

即使禁用mikro-orm缓存的

:{ enabled: false }

这是元数据缓存,默认情况下它是禁用的,除非您使用ts-morph。

em.nativeDelete()不会从标识映射中删除任何内容,所以如果您在给定的上下文中加载了该实体,那么通过它的PK查询总是会从标识映射返回实体,而不需要查询db。

一般来说,这应该是可以的,因为delete请求有自己的上下文--您是否正确地处理请求上下文?要么通过em.fork(),要么通过RequestContext助手。这是必需的。

https://mikro-orm.io/docs/identity-map

如果这种情况是故意在单个上下文中发生的,则可以使用em.removeAndFlush(em.getReference())从标识映射中删除该项。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64558214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档