数据 API 生成器GraphQL中的多个变化
数据 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名为 的另一个
Chapters
表,其中包含id
、name
和pages
列。 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
shell 变量。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
步中创建的 shell 变量。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 并使用 Banana Cake Pop 测试 GraphQL 终结点。
使用当前配置启动运行时引擎。
dab start
导航到
/graphql
正在运行的应用程序的相对终结点。 此终结点将打开“香蕉蛋糕流行”界面。注意
默认情况下,此值为
https://localhost:5001/graphql
。创作GraphQL突变,以在数据库中的两个表中创建三个不同的行。 此突变在单个“多重创建”操作中同时使用
Book
和Chapter
实体。 对突变使用以下属性。实体类型 ID 名称 页数 Year 书籍 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
注意
此查询应返回两个章节记录。