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有Bar1:1 的关系。我想隐藏BarAPI,并公开以下内容:
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 Foos,每个都有一个 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 次 |
| 最近记录: |