数据API构建器(DAB)支持将多个变更操作组合成单个事务。 多项变更支持在需要创建属于同一实体的多个项或创建属于相关实体的多个项时的场景。 本指南演练使用多个变异操作的示范场景。
先决条件
- 现有的 SQL Server 和数据库。
- 数据 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列。 创建一个与id列具有外键关系的book_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的 shell 变量。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_STRINGshell 变量。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一遍,创建章节到书关系,指定以下属性。价值 relationshipbookcardinalityonedab update Chapter --relationship book --target.entity Book --cardinality one
执行多个创建变更
若要收尾,请使用 DAB CLI 运行 API,并使用 Banana Cake Pop 测试 GraphQL 端点。
使用当前配置启动运行时引擎。
dab start导航到正在运行的应用程序的
/graphql相对终结点。 此终结点打开Banana Cake 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注释
此查询应返回两个章节记录。