ASP.NET Core中使用GraphQL - 第七章 Mutation

65831-20181111202828464-309291934.jpg

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属性。

65831-20181111202859218-765826800.png

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

65831-20181111202903366-1554585878.png

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/388018.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

POM.xml红叉解决方法

方法/步骤 1用Eclipse创建一个maven工程&#xff0c;网上有很多资料&#xff0c;这里不再啰嗦。 2右键maven工程&#xff0c;进行更新 3在弹出的对话框中勾选强制更新&#xff0c;如图所示 4稍等片刻&#xff0c;pom.xml的红叉消失了。。。

JS前台页面验证文本框非空

效果图&#xff1a; 代码&#xff1a; 源代码&#xff1a; <script type"text/javascript"> function check(){ var xm document.getElementById("xm").value; if(xm null || xm ){ alert("用户名不能为空"); return false; } return …

05精益敏捷项目管理——超越Scrum

00.我们不是不知道它会给我们带来麻烦&#xff0c;只是没想到麻烦会有这么多。——威尔.罗杰斯 01.知识点&#xff1a; a.Scrum是一个强大、特意设计的轻量级框架&#xff0c;器特性就是将软件开发中在制品的数量限制在团队层级&#xff0c;使团队有能力与业务落班一起有效地开…

带标题的图片轮询展示

为什么80%的码农都做不了架构师&#xff1f;>>> <div> <table width"671" cellpadding"0" cellspacing"0"> <tr height"5"> <td style"back…

linux java 查找进程中的线程

这里对linux下、sun(oracle) JDK的线程资源占用问题的查找步骤做一个小结&#xff1b;linux环境下&#xff0c;当发现java进程占用CPU资源很高&#xff0c;且又要想更进一步查出哪一个java线程占用了CPU资源时&#xff0c;按照以下步骤进行查找&#xff1a;(一)&#xff1a;通过…

定位匹配 模板匹配 地图_什么是地图匹配?

定位匹配 模板匹配 地图By Marie Douriez, James Murphy, Kerrick Staley玛丽杜里兹(Marie Douriez)&#xff0c;詹姆斯墨菲(James Murphy)&#xff0c;凯里克史塔利(Kerrick Staley) When you request a ride, Lyft tries to match you with the driver most suited for your…

Sprint计划列表

转载于:https://www.cnblogs.com/zhs20160715/p/9953586.html

软件测试框架课程考试_那考试准备课程值得吗?

软件测试框架课程考试By Levi Petty李维佩蒂(Levi Petty) This project uses a public, synthesized exam scores dataset from Kaggle to analyze average scores in Math, Reading, and Writing subject areas, relative to the student’s parents’ level of education an…

DOCKER windows安装

DOCKER windows安装 DOCKER windows安装 1.下载程序包2. 设置环境变量3. 启动DOCKERT4. 分析start.sh5. 利用SSH工具管理6. 下载镜像 6.1 下载地址6.2 用FTP工具上传tar包6.3 安装6.4 查看镜像6.5 运行 windows必须是64位的 1.下载程序包 安装包 https://github.com/boot2doc…

Elasticsearch Reference [6.7] » Modules » Network Settings

2019独角兽企业重金招聘Python工程师标准>>> Search Settings Node Network Settingsedit Elasticsearch binds to localhost only by default. This is sufficient for you to run a local development server (or even a development cluster, if you star…

【百度】大型网站的HTTPS实践(一)——HTTPS协议和原理

大型网站的HTTPS实践&#xff08;一&#xff09;——HTTPS协议和原理 原创 网络通信/物联网 作者&#xff1a;AIOps智能运维 时间&#xff1a;2018-11-09 15:07:39 349 0前言 百度于2015年上线了全站HTTPS的安全搜索&#xff0c;默认会将HTTP请求跳转成HTTPS。从今天开始&…

LVS原理介绍及安装过程

一、ARP技术概念介绍 为什么讲ARP技术&#xff0c;因为平常工作中有接触。还有就是LVS的dr模式是用到arp的技术和数据。 1、什么是ARP协议 ARP协议全程地址解析协议&#xff08;AddressResolution Protocol&#xff0c;ARP&#xff09;是在仅知道主机的IP地址时确定其物理地…

DNS Bind9在windows7下

有些公司技术力量薄弱一些&#xff0c;一直在用windows系统&#xff0c;所以本文从windows出发&#xff0c;安装bind&#xff0c;利用它的view功能&#xff0c;做智能DNS&#xff0c;解决双线机房南北电信联通访问问题前言&#xff1a; 搞LINUX的朋友都知道&#xff0c;bind是l…

DNS的几个基本概念:

一&#xff0e; 根域 就是所谓的“.”&#xff0c;其实我们的网址www.baidu.com在配置当中应该是www.baidu.com.&#xff08;最后有一点&#xff09;&#xff0c;一般我们在浏览器里输入时会省略后面的点&#xff0c;而这也已经成为了习惯。 根域服务器我们知道有13台&#xff…

D3.js 加标签

条形图还可以配上实际的数值,我们通过文本元素添加数据值。 svg.selectAll("text").data(dataset).enter().append("text").text(function(d){return d;}) 通过 x 和 y 值来定位文本元素。 .attr("text-anchor", "middle").attr("…

oppo5.0以上机器(亲测有效)激活Xposed框架的教程

对于喜欢玩手机的朋友而言&#xff0c;常常会用到xposed框架以及种类繁多功能强大的模块&#xff0c;对于5.0以下的系统版本&#xff0c;只要手机能获得ROOT权限&#xff0c;安装和激活xposed框架是异常简便的&#xff0c;但随着系统版本的迭代&#xff0c;5.0以后的系统&#…

熊猫分发_流利的熊猫

熊猫分发Let’s uncover the practical details of Pandas’ Series, DataFrame, and Panel让我们揭露Pandas系列&#xff0c;DataFrame和Panel的实用细节 Note to the Readers: Paying attention to comments in examples would be more helpful than going through the theo…

Fiddler抓包-只抓APP的请求

from:https://www.cnblogs.com/yoyoketang/p/6582437.html fiddler抓手机app的请求&#xff0c;估计大部分都会&#xff0c;但是如何只抓来自app的请求呢&#xff1f; 把来自pc的请求过滤掉&#xff0c;因为请求太多&#xff0c;这样会找不到重要的信息了。 环境准备&#xff1…

DOCKER windows 安装Tomcat内容

DOCKER windows安装 DOCKER windows安装 1.下载程序包2. 设置环境变量3. 启动DOCKERT4. 分析start.sh5. 利用SSH工具管理6. 下载镜像 6.1 下载地址6.2 用FTP工具上传tar包6.3 安装6.4 查看镜像6.5 运行 windows必须是64位的 1.下载程序包 安装包 https://github.com/boot2doc…

github免费空间玩法

GitHub 是一个用于使用Git版本控制系统的项目的基于互联网的存取服务,GitHub于2008年2月运行。在2010年6月&#xff0c;GitHub宣布它现在已经提供可1百万项目&#xff0c;可以说非常强大。 Github虽然是一个代码仓库&#xff0c;但是Github还免费为大家提供一个免费开源Github …