ASP.NET Core中使用GraphQL - 目录

  • ASP.NET Core中使用GraphQL - 第一章 Hello World
  • ASP.NET Core中使用GraphQL - 第二章 中间件
  • ASP.NET Core中使用GraphQL - 第三章 依赖注入
  • ASP.NET Core中使用GraphQL - 第四章 GrahpiQL
  • ASP.NET Core中使用GraphQL - 第五章 字段, 参数, 变量
  • ASP.NET Core中使用GraphQL - 第六章 使用EF Core作为持久化仓储

在前面几篇中,我们已经介绍了如何使用GraphQL中的query字段获取数据。那么如何使用GraphQL进行数据的添加,删除,修改操作呢?这里我们需要引入GraphQL中的mutation

我们继续编写新代码之前,我们需要先整理一下当前的项目代码。这里我们将HelloWorldQuery类改名为InventoryQuery类, 并将HelloWorldSchema类改名为InventorySchema。然后我们将hellohowdy两个字段移除掉。

在GraphQL中, 一个Mutation类型也是继承自ObjectGraphType类。在以下代码中,createItem字段在服务器端创建了一个货物并返回了它的内容。

InventoryMutation
public class InventoryMutation : ObjectGraphType
{public InventoryMutation(IDataStore dataStore){         Field<ItemType>("createItem",arguments: new QueryArguments(new QueryArgument<NonNullGraphType<ItemInputType>> { Name = "item" }),resolve: context =>{var item = context.GetArgument<Item>("item");return dataStore.AddItem(item);});}
}

以上代码中我们引入了一个新的ItemInputType类作为查询参数。在第五章中,我们已经创建过一个标量类型的参数。但是针对复杂类型,我们使用不同的方式。因此,这里我们创建了一个新的类ItemInputType。其代码如下:

ItemInputType
public class ItemInputType : InputObjectGraphType
{public ItemInputType(){Name = "ItemInput";Field<NonNullGraphType<StringGraphType>>("barcode");Field<NonNullGraphType<StringGraphType>>("title");Field<NonNullGraphType<DecimalGraphType>>("sellingPrice");}
}

为了将新的货物记录添加到数据库,我们还需要修改IDataStore接口,添加一个AddItem的方法,并在DataStore类中实现它。

IDataStore
public interface IDataStore
{IEnumerable<Item> GetItems();Item GetItemByBarcode(string barcode);Task<Item> AddItem(Item item);
}
DataStore
public async Task<Item> AddItem(Item item)
{var addedItem = await _context.Items.AddAsync(item);await _context.SaveChangesAsync();return addedItem.Entity;
}

这里请注意AddItem的方法签名,在添加完成之后,我们将添加成功的货物记录返回了。因此我们可以查询新添加对象的内嵌字段

Just like in queries, if the mutation field returns an object type, you can ask for nested fields. This can be useful for fetching the new state of an object after an update. - GraphQl Org.

和查询一样,如果mutation字段返回一个对象类型,你就可以查询它的内嵌字段。这对于获取一个更新后对象的新状态非常有用。

在我们运行程序之前,我们还如要在控制反转容器中注册ItemInputTypeInventoryMutation

Startup
services.AddScoped<ItemInputType>();
services.AddScoped<InventoryMutation>();  

最后我们需要在InventorySchema的构造函数中,注入InventoryMutation

InventorySchame
public class InventorySchema : Schema
{public InventorySchema(InventoryQuery query, InventoryMutation mutation){Query = query;Mutation = mutation;}
}

现在你可以运行程序了,这里我们运行如下的mutation

mutation {  createItem(item: {title: "GPU", barcode: "112", sellingPrice: 100}) {titlebarcode}
}

这段代码的意思是,我们将调用createItemmutation, 将item保存到数据库,并会返回新增item的titlebarcode属性。

当然你也可以把添加的item对象放到Query Variables窗口中, 得到的结果是一样的

本文源代码: https://github.com/lamondlu/GraphQL_Blogs/tree/master/Part%20VII

转载于:https://www.cnblogs.com/lwqlun/p/9943372.html

ASP.NET Core中使用GraphQL - 第七章 Mutation相关推荐

  1. ASP.NET Core中使用GraphQL - 第三章 依赖注入

    ASP.NET Core中使用GraphQL ASP.NET Core中使用GraphQL - 第一章 Hello World ASP.NET Core中使用GraphQL - 第二章 中间件 SOL ...

  2. ASP.NET Core中使用GraphQL - 最终章 Data Loader

    ASP.NET Core中使用GraphQL - 目录 ASP.NET Core中使用GraphQL - 第一章 Hello World ASP.NET Core中使用GraphQL - 第二章 中间 ...

  3. ASP.NET Core中使用GraphQL - 第二章 中间件

    前文:ASP.NET Core中使用GraphQL - 第一章 Hello World 中间件 如果你熟悉ASP.NET Core的中间件,你可能会注意到之前的博客中我们已经使用了一个中间件, 这个中 ...

  4. ASP.NET Core中使用GraphQL - 第一章 Hello World

    前言 你是否已经厌倦了REST风格的API? 让我们来聊一下GraphQL. GraphQL提供了一种声明式的方式从服务器拉取数据.你可以从GraphQL官网中了解到GraphQL的所有优点.在这一系 ...

  5. ASP.NET Core 中文文档 第三章 原理(5)错误处理

    原文:Error Handling 作者:Steve Smith 翻译:谢炀(Kiler) 校对:高嵩(jack2gs).何镇汐 当你的ASP.NET应用发生错误的时候, 你可以采用本文所述的各种方法 ...

  6. ASP.NET Core 中文文档 第三章 原理(3)静态文件处理

    原文:Working with Static Files 作者:Rick Anderson 翻译:刘怡(AlexLEWIS) 校对:谢炀(kiler398).许登洋(Seay).孟帅洋(书缘) 静态文 ...

  7. ASP.NET Core 中文文档 第三章 原理(13)管理应用程序状态

    原文:Managing Application State 作者:Steve Smith 翻译:姚阿勇(Dr.Yao) 校对:高嵩 在 ASP.NET Core 中,有多种途径可以对应用程序的状态进行 ...

  8. ASP.NET Core 中文文档 第三章 原理(1)应用程序启动

    原文:Application Startup 作者:Steve Smith 翻译:刘怡(AlexLEWIS) 校对:谢炀(kiler398).许登洋(Seay) ASP.NET Core 为你的应用程 ...

  9. ASP.NET Core 中文文档 第三章 原理(12)托管

    原文:Hosting 作者:Steve Smith 翻译:娄宇(Lyrics) 校对:何镇汐.许登洋(Seay) 为了运行 ASP.NET Core 应用程序,你需要使用 WebHostBuilder ...

最新文章

  1. 慎用jQuery中的submit()方法
  2. python 屏幕录制_Python实现屏幕录制功能的代码
  3. NanoPi NEO Air使用九:使用Linux内核自带的LED驱动
  4. 全年营业额怎么计算_会计税法计算公式大全
  5. 手机拍照功能的简单实现
  6. Linux shell文件测试运算符
  7. [Java基础]File基础
  8. marquee 移动属性
  9. Java 接口编程题
  10. Sublime Text 3的中文显示乱码问题
  11. android--------自定义控件 之 组合控件篇
  12. MPMoviePlayerController 电影播放器—IOS开发
  13. win11toast:python桌面通知工具
  14. python列表相加
  15. jar包打开闪退解决办法
  16. 5、win7激活秘钥
  17. 网络设备设置/取消console口登陆单独密码
  18. WPF 鼠标光标大全
  19. 集美福利!陈睿当时加入B站的故事分享
  20. 仿微信朋友圈点击评论自动定位到对应位置

热门文章

  1. html 拼接onmouseout,HTML onmouseout事件用法及代码示例
  2. 爬空气质量MySQL,mysql
  3. java 加密解密编程,java 加密解密容易实现
  4. js 获取father_(原创)Node.JS实战26:强大的工作池。收藏吧!你一定会用的到。...
  5. 鸿蒙系统的全面开源,华为:打造全球的操作系统,鸿蒙今日全面开源!
  6. 无锁队列设计思路以及简要代码
  7. c语言 函数的参数传递示例_restder()函数,带有C ++中的示例
  8. python datetime.date 和数据库date_Python成为专业人士笔记-date 对象、time 对象及datetime用法深度剖析...
  9. Ubuntu的中文是哪种字体?python的词云分析和 三国演义人物出场统计
  10. mysql 学习笔记 11过程控制