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.pswp.cn/news/388018.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/388018.shtml
英文地址,請注明出處:http://en.pswp.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 …

python對象引用計數器_在Python中借助計數器對象對項目進行計數

python對象引用計數器前提 (The Premise) When we deal with data containers, such as tuples and lists, in Python we often need to count particular elements. One common way to do this is to use the count() function — you specify the element you want to count …

套接字設置為(非)阻塞模式

當socket 進行TCP 連接的時候&#xff08;也就是調用connect 時&#xff09;&#xff0c;一旦網絡不通&#xff0c;或者是ip 地址無效&#xff0c;就可能使整個線程阻塞。一般為30 秒&#xff08;我測的是20 秒&#xff09;。如果設置為非阻塞模式&#xff0c;能很好的解決這個…

經典問題之「分支預測」

問題 來源 &#xff1a;stackoverflow 為什么下面代碼排序后累加比不排序快&#xff1f; public static void main(String[] args) {// Generate dataint arraySize 32768;int data[] new int[arraySize];Random rnd new Random(0);for (int c 0; c < arraySize; c)data…

vi

vi filename :打開或新建文件&#xff0c;并將光標置于第一行首 vi n filename &#xff1a;打開文件&#xff0c;并將光標置于第n行首 vi filename &#xff1a;打開文件&#xff0c;并將光標置于最后一行首 vi /pattern filename&#xff1a;打開文件&#xff0c;并將光標置…

數字圖像處理 python_5使用Python處理數字的高級操作

數字圖像處理 pythonNumbers are everywhere in our daily life — there are phone numbers, dates of birth, ages, and other various identifiers (driver’s license and social security numbers, for example).電話號碼在我們的日常生活中無處不在-電話號碼&#xff0c;…

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

MySQL學習【第十二篇事務中的鎖與隔離級別】

一.事務中的鎖 1.啥是鎖&#xff1f; 顧名思義&#xff0c;鎖就是鎖定的意思 2.鎖的作用是什么&#xff1f; 在事務ACID的過程中&#xff0c;‘鎖’和‘隔離級別’一起來實現‘I’隔離性的作用 3.鎖的種類 共享鎖&#xff1a;保證在多事務工作期間&#xff0c;數據查詢不會被阻…

Android WebKit

這段時間基于項目需要 在開發中與WebView的接觸比較多&#xff0c;前段時間關于HTML5規范塵埃落定的消息出現在各大IT社區頭版上&#xff0c;更有人說&#xff1a;HTML5將顛覆原生App開發 雖然我不太認同這一點 但是關于HTML5JSCSSNative的跨平臺開發模式還是為很多企業節省了開…

jQuery的事件綁定和解綁

1、綁定事件 語法&#xff1a; bind(type,data,fn) 描述&#xff1a;為每一個匹配元素的特定事件&#xff08;像click&#xff09;綁定一個事件處理器函數。 參數解釋&#xff1a; type (String) : 事件類型 data (Object) : (可選) 作為event.data屬性值傳遞給事件對象的額外數…

軟件測試框架課程考試_那考試準備課程值得嗎?

軟件測試框架課程考試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…

開博第一天

開博第一天 紀念一下 轉載于:https://www.cnblogs.com/yang-9654/p/9959388.html

GitLab 11.9 正式發布,自動化工具 ChatOps 已開源

GitLab 11.9 已正式發布&#xff0c;該版本新增了兩個和安全相關的特性&#xff0c;一是快速檢查私密信息是否泄漏&#xff0c;從該版本起在 CI/CD 過程中會掃描開發者提交的信息是否包含私密內容&#xff0c;有的話會在合并 PR 時向開發者發送警報&#xff1b;二是改進了合并 …

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…

為什么在Python代碼中需要裝飾器

Python is praised for its clarity and syntactic sugariness. In this article, I will teach you to use decorators in Python to make your code readable and clean.Python的清晰性和語法含糖度受到贊譽。 在本文中&#xff0c;我將教您在Python中使用裝飾器&#xff0c;…