.net 可以创建嵌入式Graphql查询吗?

k2fxgqgv  于 2023-11-20  发布在  .NET
关注(0)|答案(1)|浏览(81)

我试图复制一个嵌入的自我-使用GraphQl引用SQL查询。情况是,我们在数据库中的记录是由内部用户从其他记录创建的。我尝试执行的查询是获取用户的所有记录以及仅从原始创建者的用户名内部创建的关联记录。DB中的记录包含原始记录的id来保持它们之间的关系。在SQL中,我可以这样做:

select * from message 
where originalMessageId in ( select messageId from message where createdByUser = "johnDoe");

字符串
(And我无法控制此基础数据,因此无法修改结构)
我可以将其作为两个单独的GraphQl查询(获取其中一个的输出并将其作为数组变量提供给第二个),但这似乎非常低效,并且由于我使用GraphQl的原因会导致实现问题,所以我宁愿不要。
我对GraphQl模式有一些控制(在.NET 6中工作,使用HotChocolate 12和Ef Core),所以我可能能够设置一个一对多的父子关系,但我觉得我不需要这样做,而且GraphQl应该能够支持这样的查询。
如何实现这一点,或者如果它只是不可能在一个单一的查询的想法?

5f0d552i

5f0d552i1#

1.最好将其实现为单个查询,这样就可以避免从客户机到服务器的多次往返。
1.因为你可以控制服务器,所以你可以在那里定义任何你想要的查询。我建议:

type Query {
   relatedMessages(username: String!) [Message]
}

字符串
这是假设你已经定义了一个Message类型。
如果username可以通过context访问(即只有当前登录的用户才需要此查询),则可以省略username变量。
relatedMessages查询将只运行您定义的SQL。
尽管它的名字,不幸的是(或者幸运的是,取决于你的观点)GraphQL不是一种成熟的查询语言。它缺乏内置的过滤和排序运算符,不允许查询嵌套或链接(没有WITH,没有IN (SELECT…),也没有JOIN的概念-这些都必须作为你的模式的一部分设计和实现。

相关问题