GraphQL for Data API Builder 中的多個變動
數據 API 產生器 (DAB) 支援將多個變動作業結合成單一交易。 多個變動支援您需要建立屬於相同實體的多個專案,或建立屬於相關實體的多個項目的情況。 本指南會逐步解說使用多個變動作業的範例案例。
必要條件
- 現有的 SQL Server 和資料庫。
- 數據 API 產生器 CLI。 安裝 CLI
- 資料庫用戶端 (SQL Server Management Studio、Azure Data Studio 等 )
- 如果您沒有安裝用戶端, 請安裝 Azure Data Studio
建立資料表
首先,建立兩個基本數據表來代表書籍及其各自的章節。 書籍與其對應的章節有 一對多 關係。
使用您慣用的用戶端或工具連線到 SQL 資料庫。
Create 名為
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
Create 另一個名為 、
id
、name
和pages
數據行的數據表Chapters
。 Create 與book_id
數據表數據Books
行具有外鍵關聯性id
的數據行。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.Books
SELECT * 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-type
mssql
graphql.multiple-create.enabled
true
host-mode
development
connection-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 實體。值 source
dbo.Books
permissions
anonymous:*
dab add Book --source "dbo.Books" --permissions "anonymous:*"
再次執行
dab add
以新增 Chapter 實體,現在指定下列屬性。值 source
dbo.Chapters
permissions
anonymous:*
dab add Chapter --source "dbo.Chapters" --permissions "anonymous:*"
執行
dab update
以建立指定下列屬性的 Book to Chapter 關聯性。值 relationship
chapters
cardinality
many
dab update Book --relationship chapters --target.entity Chapter --cardinality many
最後,
dab update
執行最後一次執行一次,以建立指定下列屬性的 Chapter to Book 關聯性。值 relationship
book
cardinality
one
dab update Chapter --relationship book --target.entity Book --cardinality one
執行多個建立變動
若要總結事項,請使用 DAB CLI 來執行 API,並使用 「水果餅快顯」測試 GraphQL 端點。
使用目前的組態啟動運行時間引擎。
dab start
瀏覽至
/graphql
執行中應用程式的相對端點。 此端點會開啟「水果餅快顯」介面。注意
根據預設,這會是
https://localhost:5001/graphql
。撰寫 GraphQL 變動,以在資料庫中的兩個數據表之間建立三個不同的數據列。 這項變動會在
Book
單一「多個建立」作業中使用 和Chapter
實體。 針對變異使用下列屬性。實體類型 識別碼 名稱 頁面 年 書籍 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
注意
此查詢應該會傳回兩個章節記錄。