【发布时间】:2022-01-19 20:01:37
【问题描述】:
所以我试图根据来自客户端的 GraphQl 请求是否实际包含相关对象来告诉 EfCore 何时将包含应用于 IQueryable 对象。
例子:
-
2 类:人员、付款
-
论文保存在 2 个不同的表和相关人员中 -> 以一对多关系付款
-
我设置了 1 个 GraphQl 查询来检索数据库中的所有人:
[UseFiltering] [UseDbContext(typeof(DbAccess))] public IQueryable<Person> GetPeople([ScopedService] DbAccess db) { return db.People; } -
这仅返回 People 表中的字段 前任: 询问: {people{sso,payments{amount,收件人{compayName}}}} 回复: { “数据”: { “人们”: [ { "sso": "000-00-0003", “付款”:空 } ] } }
-
为了获得付款,我的 GetPeople 函数需要更改为
[UseFiltering] [UseDbContext(typeof(DbAccess))] public IQueryable<Person> GetPeople([ScopedService] DbAccess db) { return db.People.Include(p => p.Payments); } -
这可行,但当付款不是请求的一部分时会造成不必要的压力(因为每次都会运行包含)。
我想做的是这样的:
var baseQuery = db.People;
if (graphqlRequestIncludePayments)
{
baseQuery.Include(p => p.Payments);
}
return baseQuery;
但我不知道如何检查 GraphQl 查询以查看是否请求付款。我知道 GraphQl 会在返回给消费者之前删除多余的数据,但这可能会浪费服务器端的大量带宽和内存。
我觉得在 Hotchocolate ObjectType.Configure 函数中有一种方法可以做到这一点,但我看不出怎么做。
任何帮助将不胜感激,谢谢:)
【问题讨论】:
-
我认为您是完全正确的 Tobias,尽管它似乎对我不起作用。我尝试添加投影,但仍会拉出额外的字段,并且不会拉出相关字段。根据文档,它看起来确实像 Projections 应该解决问题:/
标签: c# graphql entity-framework-core hotchocolate