我正在尝试mikro-orm,所以我做了一个简单的CRUD解析器,但是我从graphql调试控制台中看到,在删除之后,如下所示:
mutation{
deleteItem(id:9)
}具有以下代码
@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解析器:
@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;
}谢谢
发布于 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())从标识映射中删除该项。
https://stackoverflow.com/questions/64558214
复制相似问题