Bra*_*Cok 12 .net-core graphql hotchocolate
我正在努力将设计粗劣的 REST API 转换为带有 Entity Framework Core 和 Hot Chocolate 的流畅 GraphQL API。
我目前正在通过 公开我的整个数据库UseProjection
。我的数据库包含一个表Foo
,该表的外键Bar
具有 property Baz
。
目前这被曝光为:
Foo {
Bar {
Baz
}
}
Run Code Online (Sandbox Code Playgroud)
就我而言,Foo
有Bar
1:1 的关系。我想隐藏Bar
API,并公开以下内容:
Foo {
Baz
}
Run Code Online (Sandbox Code Playgroud)
我在 中添加了以下内容FooType.cs
:
descriptor
.Field("Baz")
.Resolve(ctx => ctx.Parent<Foo>().Bar?.Baz);
Run Code Online (Sandbox Code Playgroud)
Baz
如果我运行在两个级别进行访问的查询,则 GQLBaz
在两个级别都会正确返回。但是,如果我省略 3 级请求,则 SQL 调用永远不会Baz
从数据库中提取,因此 2 级请求返回null
.
热巧克力文档说你可以通过添加以下内容来解决这个问题:
descriptor
.Field(Foo => Foo.Bar)
.IsProjected(true);
Run Code Online (Sandbox Code Playgroud)
但是,当我使用此代码运行查询时,我收到错误A composite type always needs to specify a selection set
。所以我不仅需要告诉 Hot Chocolate 进行项目,还需要在?Bar
中指定一组字段。Bar
我怎么做?
PS 我可以通过显式向查询添加字段来解决上述错误,但我不想污染我的查询。
PPS 我也可以通过Foo.Bar
使用 DataLoader 进行解析来做到这一点,但由于我有 ~1k Foo
s,每个都有一个 uniqueBar
和 unique Baz
,这将需要 ~1k 数据库调用。我想通过一次通话完成此操作。
热巧克力 v11,netcore3.1
编辑
IsProjected(true)
旨在用于属性,而不是表。问题是,如何将表格投影到属性中?
小智 0
也许您需要告诉 EF “自动包含”您的导航属性Baz
:
https://learn.microsoft.com/en-us/dotnet/api/microsoft.entityframeworkcore.metadata.builders.navigationbuilder.autoinclude ?view=efcore-6.0
前任:
public class BarConfig : IEntityTypeConfiguration<Bar>
{
public void Configure(EntityTypeBuilder<Bar> builder)
{
builder.Navigation(x => x.Baz).AutoInclude();
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2304 次 |
最近记录: |