如何在 Hot Chocolate 的不同架构级别公开属性

问题描述

我正致力于将设计粗糙的 REST API 转换为具有 Entity Framework Core 和 Hot Chocolate 的流畅 GraphQL API。

我目前正在通过 UseProjection 公开我的整个数据库。 我的数据库包含一个Foo,表 Bar 的外键具有属性 Baz

目前公开为:

Foo {
  Bar {
    Baz
  }
}

就我而言,FooBar 是 1:1 的关系。 我想从 API 中隐藏 Bar,并公开以下内容

Foo {
  Baz
}

我在 FooType.cs添加了以下内容

descriptor
    .Field("Baz")
    .Resolve(ctx => ctx.Parent<Foo>().Bar?.Baz);

如果我运行的查询在两个级别访问 Baz ,那么 GQL 会在两个级别正确返回 Baz。但是,如果我省略 3 级请求,则 sql 调用永远不会从数据库中拉取 Baz,因此 2 级请求返回 null

Hot Chocolate docs 表示您可以通过添加以下内容解决此问题:

descriptor
    .Field(Foo => Foo.Bar)
    .IsProjected(true);

但是,当我使用此代码运行查询时,我收到错误 A composite type always needs to specify a selection set。所以我不仅需要告诉Hot Chocolate投影Bar,还要在Bar中指定一组字段?我该怎么做?

附言我可以通过向查询显式添加字段来解决上述错误,但我不想污染我的查询

PPS 我也可以通过使用 DataLoader 解析 Foo.Bar 来实现,但是由于我有大约 1k 个 Foo,每个都有一个唯一的 Bar 和唯一的 Baz,所以将需要 ~1k 数据库调用。我想在一个电话中完成这项工作。

Hot Chocolate v11,netcore3.1

编辑

IsProjected(true) 旨在用于属性,而不是表。问题变成了,如何跨表投影到属性中?

解决方法

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

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

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