數據 API 產生器 (DAB) 支援將多個突變作業結合成單一交易。 多個突變支援您需要建立屬於相同實體的多個專案,或建立屬於相關實體的多個項目的情況。 本指南會說明使用多重突變作業的範例。
先決條件
- 現有的 SQL 伺服器和資料庫。
- 數據 API 產生器 CLI。 安裝 CLI
- 資料庫用戶端 (SQL Server Management Studio、Azure Data Studio 等)
- 如果您沒有安裝用戶端, 請安裝 Azure Data Studio
建立數據表
首先,建立兩個基本數據表來代表書籍及其各自的章節。 書籍與其對應的章節有 一對多 關係。
使用您慣用的用戶端或工具連線到 SQL 資料庫。
使用名稱為
Books的資料表,建立具有id、title、year和pages欄位。DROP TABLE IF EXISTS dbo.Books; CREATE TABLE dbo.Books ( id int NOT NULL PRIMARY KEY, title nvarchar(1000) NOT NULL, [year] int null, [pages] int null ) GO建立另一個名為
Chapters並包含id、name和pages欄位的表格。 建立一個book_id欄位,其與id欄位在Books表中有 外鍵 關聯。DROP TABLE IF EXISTS dbo.Chapters; CREATE TABLE dbo.Chapters ( id int NOT NULL PRIMARY KEY, [name] nvarchar(1000) NOT NULL, [pages] int null, book_id int NOT NULL, FOREIGN KEY (book_id) REFERENCES dbo.Books(id) ) GO驗證您的數據表是否使用一些常見的 SQL 查詢來建立。
SELECT * FROM dbo.BooksSELECT * FROM dbo.Chapters備註
此時,查詢不應傳回任何數據。
建置組態檔
現在,使用 DAB CLI 來建立組態檔、實體和實體關聯性。
開啟終端機
將您的 SQL 資料庫連接字串儲存為名為 的
SQL_CONNECTION_STRING殼層變數。SQL_CONNECTION_STRING="<your-sql-connection-string>"$SQL_CONNECTION_STRING="<your-sql-connection-string>"執行
dab init,指定下列屬性。價值觀 database-typemssqlgraphql.multiple-create.enabledtruehost-modedevelopmentconnection-string使用在 SQL_CONNECTION_STRING上一個步驟中建立的殼層變數。dab init --database-type "mssql" --graphql.multiple-create.enabled true --host-mode "development" --connection-string $SQL_CONNECTION_STRING執行
dab add以新增指定下列屬性的 Book 實體。價值觀 sourcedbo.Bookspermissionsanonymous:*dab add Book --source "dbo.Books" --permissions "anonymous:*"再次執行
dab add以新增 Chapter 實體,現在指定下列屬性。價值觀 sourcedbo.Chapterspermissionsanonymous:*dab add Chapter --source "dbo.Chapters" --permissions "anonymous:*"執行
dab update以建立指定下列屬性的 Book to Chapter 關聯性。價值觀 relationshipchapterscardinalitymanydab update Book --relationship chapters --target.entity Chapter --cardinality many最後,
dab update執行最後一次,以建立指定下列屬性的 Chapter to Book 關聯性。價值觀 relationshipbookcardinalityonedab update Chapter --relationship book --target.entity Book --cardinality one
執行多個建立突變
若要總結專案,請使用 DAB CLI 來執行 API,並使用 Banana Cake Pop 測試 GraphQL 端點。
使用目前的組態啟動運行時間引擎。
dab start導覽至執行中應用程式的
/graphql相對端點。 此端點會開啟香蕉蛋糕 Pop 介面。備註
根據預設,這會是
https://localhost:5001/graphql。撰寫 GraphQL 突變,以在資料庫中的兩個數據表之間建立三個不同的數據列。 這項突變會在單一的「多重建立」作業中使用
Book和Chapter實體。 針對突變使用下列屬性。實體類型 ID 名稱 頁面 年 書 1 數據 API 產生器簡介 200 2024 章 2 組態檔 150 章 3 跑步 50 mutation { createBook( item: { id: 1 title: "Introduction to Data API builder" pages: 200 year: 2024 chapters: [ { id: 2 name: "Configuration files", pages: 150 } { id: 3 name: "Running", pages: 50 } ] } ) { id title pages year chapters { items { name pages } } } }觀察突變的輸出。 這次變更創建了兩種實體類型的相關數據。
{ "data": { "createBook": { "id": 1, "title": "Introduction to Data API builder", "pages": 200, "year": 2024, "chapters": { "items": [ { "name": "Configuration files", "pages": 150 }, { "name": "Running", "pages": 50 } ] } } } }使用 GraphQL 查詢來擷取資料庫中的所有書籍,包括其相關章節。
query { books { items { pages title year chapters { items { name pages } } } } }備註
此時,查詢應該會傳回具有兩章的單一書籍。
請觀察此查詢的輸出,其中包含書籍的陣列,以及書籍中巢狀的章節陣列。
{ "data": { "books": { "items": [ { "pages": 200, "title": "Introduction to Data API builder", "year": 2024, "chapters": { "items": [ { "name": "Configuration files", "pages": 150 }, { "name": "Running", "pages": 50 } ] } } ] } } }使用您慣用的用戶端或工具再次連線到 SQL 資料庫。
驗證您的數據是否已使用 SQL 查詢成功建立。
SELECT c.name AS chapterName, c.pages AS chapterPages, b.title AS bookName, b.year AS releaseYear FROM dbo.Chapters c LEFT JOIN dbo.Books b ON b.id = c.book_id備註
此查詢應該會傳回兩個章節記錄。