共用方式為


GraphQL for Data API Builder 中的多個變動

數據 API 產生器 (DAB) 支援將多個變動作業結合成單一交易。 多個變動支援您需要建立屬於相同實體的多個專案,或建立屬於相關實體的多個項目的情況。 本指南會逐步解說使用多個變動作業的範例案例。

必要條件

  • 現有的 SQL Server 和資料庫。
  • 數據 API 產生器 CLI。 安裝 CLI
  • 資料庫用戶端 (SQL Server Management Studio、Azure Data Studio 等 )

建立資料表

首先,建立兩個基本數據表來代表書籍及其各自的章節。 書籍與其對應的章節有 一對多 關係。

  1. 使用您慣用的用戶端或工具連線到 SQL 資料庫。

  2. Create 名為 Books 的數據表,其中包含 idtitleyear、 和 數據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
    
  3. Create 另一個名為 、idnamepages 數據行的數據表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
    
  4. 驗證您的數據表是否使用一些常見的 SQL 查詢來建立。

    SELECT * FROM dbo.Books
    
    SELECT * FROM dbo.Chapters
    

    注意

    此時,查詢不應傳回任何數據。

建置組態檔

現在,使用 DAB CLI 來建立組態檔、實體和實體關聯性。

  1. 開啟終端機

  2. 將您的 SQL 資料庫儲存 連接字串 為名為 的SQL_CONNECTION_STRING殼層變數。

    SQL_CONNECTION_STRING="<your-sql-connection-string>"
    
    $SQL_CONNECTION_STRING="<your-sql-connection-string>"
    
  3. 執行 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
    
  4. 執行 dab add 以新增指定下列屬性的 Book 實體。

    source dbo.Books
    permissions anonymous:*
    dab add Book --source "dbo.Books" --permissions "anonymous:*"
    
  5. 再次執行 dab add 以新增 Chapter 實體,現在指定下列屬性。

    source dbo.Chapters
    permissions anonymous:*
    dab add Chapter --source "dbo.Chapters" --permissions "anonymous:*"  
    
  6. 執行 dab update 以建立指定下列屬性的 Book to Chapter 關聯性。

    relationship chapters
    cardinality many
    dab update Book --relationship chapters --target.entity Chapter --cardinality many
    
  7. 最後, dab update 執行最後一次執行一次,以建立指定下列屬性的 Chapter to Book 關聯性。

    relationship book
    cardinality one
    dab update Chapter --relationship book --target.entity Book --cardinality one
    

執行多個建立變動

若要總結事項,請使用 DAB CLI 來執行 API,並使用 「水果餅快顯」測試 GraphQL 端點。

  1. 使用目前的組態啟動運行時間引擎。

    dab start
    
  2. 瀏覽至 /graphql 執行中應用程式的相對端點。 此端點會開啟「水果餅快顯」介面。

    注意

    根據預設,這會是 https://localhost:5001/graphql

  3. 撰寫 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
          }
        }
      }
    }
    
  4. 觀察變異的輸出。 這兩種實體類型都建立了相關數據。

    {
      "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
              }
            ]
          }
        }
      }
    }
    
  5. 使用 GraphQL 查詢來擷取資料庫中的所有書籍,包括其相關章節。

    query {
      books {
        items {
          pages
          title
          year
          chapters {
            items {
              name
              pages
            }
          }
        }
      }
    }
    

    注意

    此時,查詢應該會傳回含有兩章的單一書籍。

  6. 觀察此查詢的輸出,其中包含書籍陣列,包括其巢狀章節陣列。

    {
      "data": {
        "books": {
          "items": [
            {
              "pages": 200,
              "title": "Introduction to Data API builder",
              "year": 2024,
              "chapters": {
                "items": [
                  {
                    "name": "Configuration files",
                    "pages": 150
                  },
                  {
                    "name": "Running",
                    "pages": 50
                  }
                ]
              }
            }
          ]
        }
      }
    }
    
  7. 使用您慣用的用戶端或工具再次連線到 SQL 資料庫。

  8. 驗證您的數據是否已使用 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
    

    注意

    此查詢應該會傳回兩個章節記錄。