GraphQL.NET - 预填充数据加载器

问题描述

假设我有类似的类型

type Node {
  parentNode: Node
  childNodes: [Node!]!
  friendNode: Node
}

在 NodeType 中,我使用 DataLoader 加载子节点

Field<NonNullGraphType<ListGraphType<NonNullGraphType<NodeType>>>,IEnumerable<Node>>()
  .Name("childNodes")
  .ResolveAsync(ctx =>
  {
    var nodesLoaded = accessor.Context.GetorAddCollectionBatchLoader<int,Node>("GetNodesByParentIds",nodeRepo.GetNodesByParentIdsAsync);
    return nodesLoaded.LoadAsync(ctx.source.Id);
  });

稍后我想加载父节点或朋友节点。然而,有可能在某些“加载子节点”操作中更早地加载了相同的节点

Field<NodeType,Node>()
  .Name("parentNode") //or friendNode
  .ResolveAsync(ctx =>
  {
    var nodeLoaded = accessor.Context.GetorAddBatchLoader<int,Node>("GetNodesByIds",nodeRepo.GetNodesByIdsAsync);
    return nodeLoaded.LoadAsync(ctx.source.ParentNodeId); //or FriendNodeId
  });

是否支持使用解析“GetNodesByParentId”时获得的值预填充“GetNodesByIds”数据加载器的方法,但仍然在未加载节点时调用存储库方法

我发现的最佳解决方案是创建自定义的“假”IDataLoader 来存储加载的节点和

  1. 在解析 'GetNodesByParentIds' 后填写此内容(在 .Then() 中)
  2. 调用“GetNodesByIds”之前,检查带有 id 的节点是否是这个“假”数据加载器
  3. 如果节点不存在,则使用其他加载器 - 'GetNodesByIds'

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)