如何使用.net Graphql NuGet联机查询现有数据库?(c#)

如何使用.net Graphql NuGet联机查询现有数据库?(c#),c#,.net,graphql,C#,.net,Graphql,我的目标:创建一个通过GraphQl查询现有在线数据库的Windows窗体应用程序 我所做的: 为了模拟graphQl服务器,我一直遵循官方的做法,直到最后。现在我可以从GraphQl游乐场进行查询并得到响应。此服务器在localhost:4000上运行 我在VisualStudio中创建了一个windows窗体应用程序,该应用程序在graphQl中查询包含模拟数据的内部数据库。例如 我的Form.cs类包含以下代码,我在其中执行查询onButtonClick private voi

我的目标:创建一个通过GraphQl查询现有在线数据库的Windows窗体应用程序

我所做的:

  • 为了模拟graphQl服务器,我一直遵循官方的做法,直到最后。现在我可以从GraphQl游乐场进行查询并得到响应。此服务器在localhost:4000上运行
  • 我在VisualStudio中创建了一个windows窗体应用程序,该应用程序在graphQl中查询包含模拟数据的内部数据库。例如
我的Form.cs类包含以下代码,我在其中执行查询onButtonClick

    private void button1_Click(object sender, EventArgs e)
    {
        var schema = Schema.For(@"
            type Jedi {
                name: String,
                side: String,
                id: ID
            }
            type Query {
                hello: String,
                jedis: [Jedi],
                jedi(id: ID): Jedi
            }", _ => { _.Types.Include<Query>(); }
        );

        var json = schema.Execute(_ =>
        {
            _.Query = "{jedis { name, side } }";
        });

        System.Diagnostics.Debug.WriteLine(json);

        label1.Text = json;
    }
private void按钮1\u单击(对象发送者,事件参数e)
{
var schema=schema.For(@)
绝地武士{
名称:String,
边:弦,,
id:id
}
类型查询{
你好:字符串,
绝地武士:[绝地武士],
绝地武士:绝地武士
}“,=>{uu.Types.Include();}”
);
var json=schema.Execute(\ujson=>
{
_.Query=“{jedis{name,side}}”;
});
System.Diagnostics.Debug.WriteLine(json);
label1.Text=json;
}
执行查询后,我的query.cs类将识别它并解析查询

class Query
{
    [GraphQLMetadata("jedis")]
    public IEnumerable<Jedi> GetJedis()
    {
        return StarWarsDB.GetJedis();
    }
}
类查询
{
[绝地武士]
公共IEnumerable GetJedis()
{
返回StarWarsDB.GetJedis();
}
}
这是我当前的内部数据库

class StarWarsDB
{
    public static IEnumerable<Jedi> GetJedis()
    {
        return new List<Jedi>() {
    new Jedi(){ Id = 1, Name ="Luke", Side="Light"},
    new Jedi(){ Id = 2, Name ="Yoda", Side="Light"},
    new Jedi(){ Id = 3, Name ="Darth Vader", Side="Dark"}
};
    }
}
class StarWarsDB
{
公共静态IEnumerable GetJedis()
{
返回新列表(){
新绝地(){Id=1,Name=“Luke”,Side=“Light”},
新绝地(){Id=2,Name=“Yoda”,Side=“Light”},
新绝地(){Id=3,Name=“达斯维德”,Side=“黑暗”}
};
}
}
我想做的下一步:

现在,我在网上找到了很多关于如何查询数据库的例子,但它们都是在VisualStudio内部制作的。我想做的是连接到我的本地主机上运行的个人数据库(我在下面做的那个),并用graphQl查询它。然后将JSON响应打印到某个地方

GraphQL是API的查询语言,也是服务器端运行时,用于使用为数据定义的类型系统执行查询。GraphQL不绑定到任何特定的数据库或存储引擎,而是由您现有的代码和数据支持。-

嗨,扎耶德

也许我误解了您的解释,但您不能使用GraphQL直接查询数据库。在连接和GraphQL逻辑之间需要一个API项目。将GraphQL方案发布到API端点,它将根据端点返回正确的数据结构

我找到了一个示例,其中将逐步解释如何在ASP.NETCore2中实现它


希望这有帮助。祝你好运

你把它弄混了一点。首先,您不需要在客户机上声明模式。 如果我理解正确,您正在使用webforms,并且希望访问后端的api服务,该服务将返回您的数据

因此,在这种情况下,在webforms项目中需要一个graphql“客户机”,通过它可以“连接”到prisma api这样的端点,然后只将查询或突变作为请求发送到api

这是客户端的链接,您可以将其作为nuget安装,然后按照文档进行操作

因此,在解释的最简单的术语中,graphqlClient向=>endpoint(在本例中为您的prisma api)发送一个查询,该查询从您的数据库获取数据=>


客户端(查询)=>Api(选择*数据源)=>DB(SQL)=>Api(返回数据)=>Client(反序列化)=>bind to UI=>查看输出。

感谢您的回答,我理解您的观点,链接似乎很有趣。但是现在想想,我已经建立了这样的系统。数据库在Prisma中,我可以使用GraphQl游乐场(localhost:4000)查询他,并使用Node解析查询。关键是我是否可以连接到localhost:4000(例如,从windows窗体onbuttonclick或其他什么),以及如何传递查询字符串以执行。抱歉,如果它看起来有点混乱,也许我只是错过了大局是如何运作的。Prisma不是一个数据库。它基本上是一个API层,位于您的程序和它查询到的数据库之间,但是来自第三方而不是您自己的数据库。我建议您按照上面链接中的指南使用自己的Web API。如果您仍然希望使用Prisma,基本上可以向您的端点执行HTTP请求(与Postman相同),并将scheme作为主体发送。