Entities

Nastavení konfigurace pro databázové entity

Health

Property Description
entities.entity-name.health.enabled Povolí kontroly stavu pro entitu (koncové body REST i GraphQL).
entities.entity-name.health.first Počet řádků vrácených v dotazu kontroly stavu (rozsah: 1–500)
entities.entity-name.health.threshold-ms Maximální doba trvání v milisekundách pro dotaz kontroly stavu (min: jedna)

Description

Property Description
entities.entity-name.description Popis entity čitelný pro člověka

Fields

Property Description
entities.entity-name.fields[].name Název databázového pole (povinné)
entities.entity-name.fields[].alias Název vystavený rozhraním API (nahrazuje mapování)
entities.entity-name.fields[].description Popis polí čitelný pro člověka
entities.entity-name.fields[].primary-key Označí pole jako primární klíč (nahrazuje pole klíč-pole).

Source

Property Description
entities.entity-name.source.type Typ objektu: table, viewnebo stored-procedure
entities.entity-name.source.object Název databázového objektu
entities.entity-name.source.object-description Popis databázového objektu čitelný pro člověka
entities.entity-name.source.parameters Parametry uložených procedur nebo funkcí
entities.entity-name.source.key-fields Seznam polí primárního klíče pro zobrazení (zastaralé)
entities.entity-name.mappings Mapuje názvy polí rozhraní API na databázové sloupce (zastaralé)

REST

Property Description
entities.entity-name.rest.enabled Povolí rest pro tuto entitu.
entities.entity-name.rest.path Vlastní trasa pro koncový bod REST
entities.entity-name.rest.methods Povolené metody REST: get, post, putpatch,delete

GraphQL

Property Description
entities.entity-name.graphql.type Zadejte název nebo objekt s singularplural
entities.entity-name.graphql.operation Typ operace: query nebo mutation
entities.entity-name.graphql.enabled Povolí pro tuto entitu GraphQL.

Permissions

Property Description
entities.entity-name.permissions[].role Řetězec názvu role
entities.entity-name.permissions[].actions Jeden nebo více z: create, read, update, deleteexecute

Relationships

Property Description
entities.entity-name.relationships.relationship-name.cardinality one nebo many
entities.entity-name.relationships.relationship-name.target.entity Název cílové entity
entities.entity-name.relationships.relationship-name.source.fields Pole z této entity použité v relaci
entities.entity-name.relationships.relationship-name.target.fields Pole z cílové entity
entities.entity-name.relationships.relationship-name.linking.object Objekt spojení použitý pro relace M:N
entities.entity-name.relationships.relationship-name.linking.source.fields Pole ze zdrojové entity použité ve spojení
entities.entity-name.relationships.relationship-name.linking.target.fields Pole z cílové entity použité při spojení

Cache

Property Description
entities.entity-name.cache.enabled Povolí ukládání odpovědí do mezipaměti pro entitu.
entities.entity-name.cache.ttl-seconds Ukládání do mezipaměti v sekundách
entities.entity-name.cache.level Úroveň mezipaměti: L1 (pouze v paměti) nebo L1L2 (v paměti + distribuovaná)

MCP

Property Description
entities.entity-name.mcp Objekt, který řídí účast protokolu MCP (Model Context Protocol) pro entitu
entities.entity-name.mcp.dml-tools Povolí nebo zakáže nástroje jazyka DML (Data Manipulat Language) pro entitu.
entities.entity-name.mcp.custom-tool Zaregistruje uloženou proceduru jako pojmenovaný nástroj MCP (pouze entity uložené procedury).

Přehled formátu

{
  "entities": {
    "{entity-name}": {
      "description": <string>,
      "rest": {
        "enabled": <boolean> // default: true
        "path": <string> // default: "{entity-name}"
        "methods": ["GET", "POST"] // default: ["GET", "POST"]
      },
      "graphql": {
        "enabled": <boolean> // default: true
        "type": {
          "singular": <string>,
          "plural": <string>
        },
        "operation": "query" | "mutation" // default: "query"
      },
      "source": {
        "object": <string>,
        "object-description": <string>,
        "type": "view" | "stored-procedure" | "table",
        "key-fields": [<string>], // DEPRECATED: use fields[].primary-key
        "parameters": [ // array format (preferred)
          {
            "name": "<parameter-name>",
            "required": <boolean>,
            "default": <value>,
            "description": "<string>"
          }
        ]
      },
      "fields": [
        {
          "name": "<database-field-name>",
          "alias": "<api-exposed-name>",
          "description": "<string>",
          "primary-key": <boolean>
        }
      ],
      "mappings": { // DEPRECATED: use fields[].alias
        "<database-field-name>": <string>
      },
      "relationships": {
        "<relationship-name>": {
          "cardinality": "one" | "many",
          "target.entity": <string>,
          "source.fields": [<string>],
          "target.fields": [<string>],
          "linking.object": <string>,
          "linking.source.fields": [<string>],
          "linking.target.fields": [<string>]
        }
      },
      "permissions": [
        {
          "role": "anonymous" | "authenticated" | <custom-role>,
          "actions": ["create", "read", "update", "delete", "execute", "*"],
          "fields": {
            "include": [<string>],
            "exclude": [<string>]
          },
          "policy": {
            "database": <string>
          }
        }
      ],
      "cache": {
        "enabled": <boolean>,
        "ttl-seconds": <integer>,
        "level": "L1" | "L1L2" // default: "L1L2"
      },
      "mcp": {
        "dml-tools": <boolean>,       // default: true
        "custom-tool": <boolean>      // stored-procedure only; default: false
      }
    }
  }
}

Zdroj (entity s názvem entity)

Parent Property Typ Required Default
entities.{entity-name} source objekt ✔️ Ano None

Podrobnosti o zdroji databáze entity.

Vnořené vlastnosti

Parent Property Typ Required Default
entities.{entity-name}.source object řetězec ✔️ Ano None
entities.{entity-name}.source object-description řetězec ❌ Ne None
entities.{entity-name}.source type enum (table, view, stored-procedure) ✔️ Ano None
entities.{entity-name}.source key-fields Řetězcové pole ❌ Ne* None
entities.{entity-name}.source parameters pole nebo objekt ❌ Ne** None

* key-fieldsje povinný pouze v případětype, view že pole fields není použito. Hodnota představuje primární klíče.

Výstraha

Vlastnost key-fields je v JAZYCE DAB 2.0 zastaralá. fields Místo toho použijte poleprimary-key: true. Schéma to vynucuje fields a key-fields nemůže existovat ve stejné entitě.

** parameters je vyžadován pouze v případě, že type jsou stored-procedure parametry s výchozími hodnotami a pouze pro parametry. Datový typ parametru je odvozen. Parametry bez výchozího nastavení je možné vynechat.

object-description je volitelný popis základního databázového objektu, který je čitelný pro člověka. Tato hodnota se zobrazí během zjišťování nástrojů MCP a pomáhá agentům umělé inteligence porozumět účelu entity.

Tip

Pokud objekt patří do schématu dbo, je zadání schématu volitelné. Hranaté závorky kolem názvů objektů (například dbo.Users vs. [dbo].[Users]) lze použít v případě potřeby.

Format

{
  "entities": {
    "{entity-name}": {
      "source": {
        "object": <string>,
        "object-description": <string>,
        "type": <"view" | "stored-procedure" | "table">,
        "key-fields": [ <string> ], // DEPRECATED: use fields[].primary-key
        "parameters": [ // array format (preferred)
          {
            "name": "<parameter-name>",
            "required": <boolean>,
            "default": <value>,
            "description": "<string>"
          }
        ]
      }
    }
  }
}

Formát pole parametrů

V JAZYCE DAB 2.0 Preview parameters podporuje formát strukturovaného pole s bohatšími metadaty. Každý parametr je objekt s následujícími vlastnostmi:

Property Typ Required Description
name řetězec ✔️ Ano Název parametru (bez předpony @ )
required boolean ❌ Ne Určuje, jestli je parametr povinný (true) nebo volitelný (false)
default any ❌ Ne Výchozí hodnota použitá při nezadaném parametru
description řetězec ❌ Ne Popis parametru čitelný pro člověka

Příklad (formát pole – upřednostňovaný)

{
  "entities": {
    "GetBookById": {
      "source": {
        "type": "stored-procedure",
        "object": "dbo.get_book_by_id",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "default": null,
            "description": "The unique identifier of the book"
          }
        ]
      }
    }
  }
}

Výstraha

Formát slovníku ( parameters například { "id": 0 }) je v JAZYCE DAB 2.0 zastaralý. Použijte předchozí formát pole. Starý formát je stále přijímán kvůli zpětné kompatibilitě, ale bude odebrán v budoucí verzi.

Note

Funkce tvůrce rozhraní Data API 2.0 popsané v této části jsou aktuálně ve verzi Preview a můžou se změnit před obecnou dostupností. Další informace najdete v tématu Co je nového ve verzi 2.0.

Oprávnění (entity s názvem entity)

Parent Property Typ Required Default
entities.permissions role řetězec ✔️ Ano None

Určuje název role, na kterou se vztahují oprávnění. Použijte systémové role (Anonymous, Authenticated) nebo vlastní role definované ve vašem zprostředkovateli identity.

Tip

Podrobné informace o vyhodnocení rolí, systémových rolích a hlavičce najdete v přehleduX-MS-API-ROLE autorizace.

Format

{
  "entities": {
    "{entity-name}": {
      "permissions": [
        {
          "role": <"Anonymous" | "Authenticated" | "custom-role">,
          "actions": [ <string> ]
        }
      ]
    }
  }
}

Example

{
  "entities": {
    "User": {
      "permissions": [
        {
          "role": "reader",
          "actions": ["read"]
        }
      ]
    }
  }
}

Dědičnost rolí

DAB 2.0 zavádí dědičnost rolí pro oprávnění entity. Pokud role není explicitně nakonfigurovaná pro entitu, dědí oprávnění z širší role pomocí následujícího řetězce:

named-role → authenticated → anonymous
  • Pokud authenticated není pro entitu nakonfigurovaná, dědí z anonymousní .
  • Pokud pojmenovaná role není nakonfigurovaná, dědí z authenticatedobjektu , nebo z anonymous ní, pokud authenticated chybí.

To znamená, že můžete jednou definovat oprávnění anonymous a každá širší role získá stejný přístup automaticky bez nutnosti duplikace.

Note

Funkce tvůrce rozhraní Data API 2.0 popsané v této části jsou aktuálně ve verzi Preview a můžou se změnit před obecnou dostupností. Další informace najdete v tématu Co je nového ve verzi 2.0.

Example

{
  "entities": {
    "Book": {
      "source": "dbo.books",
      "permissions": [
        { "role": "anonymous", "actions": [ "read" ] }
      ]
    }
  }
}

S touto konfigurací , anonymous, authenticateda všechny nekonfigurované pojmenované role mohou číst Book. Umožňuje dab configure --show-effective-permissions zobrazit vyřešená oprávnění pro každou entitu po použití dědičnosti.

Akce (entity s oprávněními pro pole řetězců)

Parent Property Typ Required Default
entities.permissions actions oneOf [řetězec, pole] ✔️ Ano None

Pole řetězců s podrobnostmi o tom, jaké operace jsou pro přidruženou roli povolené.

Action Operace SQL
* Všechny akce
create Vložení jednoho nebo více řádků*
read Výběr jednoho nebo více řádků
update Úprava jednoho nebo více řádků*
delete Odstranění jednoho nebo více řádků*
execute Spustí uloženou proceduru.

* V GraphQL je aktuálně podporováno více operací.

Note

U uložených procedur se akce se zástupným znakem (*) rozbalí pouze na akci execute. Pro tabulky a zobrazení se rozbalí na create, read, updatea delete.

Format

{
  "entities": {
    "{entity-name}": {
      "permissions": [
        {
          "actions": [ <string> ]
        }
      ]
    }
  }
}

Example

{
  "entities": {
    "{entity-name}": {
      "permissions": [
        {
          "actions": [ "*" ] // equivalent to create, read, update, delete
        }
      ]
    }
  }
}

Alternativní formát (pouze řetězec, pokud type=stored-procedure)

{
  "entities": {
    "{entity-name}": {
      "permissions": [
        {
          "actions": <string>
        }
      ]
    }
  }
}

Example

{
  "entities": {
    "{entity-name}": {
      "permissions": [
        {
          "actions": "*" // equivalent to execute
        }
      ]
    }
  }
}

Akce (entity s názvem entity oprávnění pole objektů)

Parent Property Typ Required Default
entities.{entity-name}.permissions actions Řetězcové pole ✔️ Ano None

Pole objektů s podrobnostmi o tom, jaké operace jsou pro přidruženou roli povolené.

Note

U uložených procedur se akce se zástupným znakem (*) rozbalí pouze na execute. Pro tabulky a zobrazení se rozbalí na create, read, updatea delete.

Vnořené vlastnosti

Parent Property Typ Required Default
entities.{entity-name}.permissions.actions[] action řetězec ✔️ Ano None
entities.{entity-name}.permissions.actions[] fields objekt ❌ Ne None
entities.{entity-name}.permissions.actions[] policy objekt ❌ Ne None
entities.{entity-name}.permissions.actions[].policy database řetězec ✔️ Ano None

Format

{
  "entities": {
    "{entity-name}": {
      "permissions": [
        {
          "role": <string>,
          "actions": [
            {
              "action": <string>,
              "fields": <array of strings>,
              "policy": <object>
            }
          ]
        }
      ]
    }
  }

Example

Tím se udělí read oprávnění k auditor entitě User s omezeními polí a zásad.

{
  "entities": {
    "User": {
      "permissions": [
        {
          "role": "auditor",
          "actions": [
            {
              "action": "read",
              "fields": {
                "include": ["*"],
                "exclude": ["last_login"]
              },
              "policy": {
                "database": "@item.IsAdmin eq false"
              }
            }
          ]
        }
      ]
    }
  }
}

Poznámky k zásadám

Zásady databáze filtruje výsledky dotazů pomocí predikátů ve stylu OData. Slouží @item.<field> k odkazům na pole entit a @claims.<type> k vložení ověřených deklarací identity uživatelů.

Aspekt Podrobnosti
Syntaxe Predikáty OData (eq, ne, and, or, gt, lt)
Referenční pole @item.<field> (pokud je k dispozici, použijte mapovaný název.
Referenční informace k deklaraci identity @claims.<claimType>
Podporované akce read, updatedelete
Není podporováno create, execute

Tip

Podrobné pokyny k zásadám databáze, včetně nahrazení deklarací identity a řešení potíží, najdete v tématu Konfigurace zásad databáze.

Typ (entity s názvem entity GraphQL)

Parent Property Typ Required Default
entities.{entity-name}.graphql type objekt ❌ Ne {entity-name}

Nastaví konvenci vytváření názvů pro entitu ve schématu GraphQL.

Format

{
  "entities": {
    "{entity-name}": {
      "graphql": {
        "type": {
          "singular": "<string>",
          "plural": "<string>"
        }
      }
    }
  }
}

Vnořené vlastnosti

Parent Property Required Typ Default
entities.{entity-name}.graphql.type singular ✔️ Ano* řetězec None
entities.{entity-name}.graphql.type plural ❌ Ne řetězec Není k dispozici (výchozí hodnota je singulární hodnota)

* singular je vyžadován, pokud type je zadán jako objekt. Pokud type je prostý řetězec, tento řetězec se použije jako název jednotného čísla.

Example

Configuration

{
  "entities": {
    "User": {
      "graphql": {
        "type": {
          "singular": "User",
          "plural": "Users"
        }
      }
    }
  }
}

Dotaz GraphQL

{
  Users {
    items {
      id
      name
      age
      isAdmin
    }
  }
}

Odpověď GraphQL

{
  "data": {
    "Users": {
      "items": [
        {
          "id": 1,
          "name": "Alice",
          "age": 30,
          "isAdmin": true
        },
        {
          "id": 2,
          "name": "Bob",
          "age": 25,
          "isAdmin": false
        }
        // ...
      ]
    }
  }
}

Operace (entity s názvem entity GraphQL)

Parent Property Typ Required Default
entities.{entity-name}.graphql operation enum string ❌ Ne mutation

Určuje, zda se stored-procedure operace zobrazí pod položkou Query nebo Mutation.

Note

Pokud {entity-name}.type je nastavená hodnota stored-procedure, automaticky se vytvoří nový typ executeXXX GraphQL. Tato operation vlastnost určuje, kde je tento typ umístěn ve schématu GraphQL. Není žádný funkční dopad, jen hygiena schématu.

Format

{
  "entities": {
    "{entity-name}": {
      "graphql": {
        "operation": "query" | "mutation"
      }
    }
  }
}

Příklad: operace

Kdy operation je nastavená hodnota query

type Query {
  executeGetUserDetails(userId: Int!): GetUserDetailsResponse
}

Kdy operation je nastavená hodnota mutation

type Mutation {
  executeGetUserDetails(userId: Int!): GetUserDetailsResponse
}

Povoleno (entity s názvem entity GraphQL)

Parent Property Typ Required Default
entities.{entity-name}.graphql enabled boolean ❌ Ne True

Umožňuje vývojářům selektivně zahrnout entity do schématu GraphQL.

Format

{
  "entities": {
    "{entity-name}": {
      "graphql": {
        "enabled": <true> (default) | <false>
      }
    }
  }
}

REST (entity s názvem entity)

Parent Property Typ Required Default
entities.{entity-name}.rest enabled boolean ❌ Ne True
entities.rest path řetězec ❌ Ne /{entity-name}
entities.{entity-name}.rest methods Řetězcové pole ❌ Ne* POST

* Vlastnost methods je určena pouze pro stored-procedure koncové body.

Note

Funkce tvůrce rozhraní Data API 2.0 popsané v této části jsou aktuálně ve verzi Preview a můžou se změnit před obecnou dostupností. Další informace najdete v tématu Co je nového ve verzi 2.0.

Format

{
  "entities": {
    "{entity-name}": {
      "rest": {
        "enabled": <true> (default) | <false>,
        "path": <string; default: "{entity-name}">
      }
    }
  }
}

Popis (entity s názvem entity)

Parent Property Typ Required Default
entities.{entity-name} description řetězec ❌ Ne None

Volitelný popis entity čitelný pro člověka. Tato hodnota se zobrazí v dokumentaci k vygenerovaném rozhraní API a jako komentář ve schématu GraphQL.

Note

Funkce tvůrce rozhraní Data API 2.0 popsané v této části jsou aktuálně ve verzi Preview a můžou se změnit před obecnou dostupností. Další informace najdete v tématu Co je nového ve verzi 2.0.

Format

{
  "entities": {
    "{entity-name}": {
      "description": "<string>"
    }
  }
}

Example

{
  "entities": {
    "Book": {
      "description": "Represents a book in the catalog with title, author, and pricing information.",
      "source": {
        "object": "dbo.books",
        "type": "table"
      }
    }
  }
}

Pole (entity s názvem entity)

Parent Property Typ Required Default
entities.{entity-name} fields pole ❌ Ne None

Definuje metadata pro jednotlivá pole databáze, včetně aliasů, popisů a označení primárního klíče. Pole fields nahradí mappings (prostřednictvím alias vlastnosti) i source.key-fields (přes primary-key vlastnost) v jedné sjednocené struktuře.

Note

Funkce tvůrce rozhraní Data API 2.0 popsané v této části jsou aktuálně ve verzi Preview a můžou se změnit před obecnou dostupností. Další informace najdete v tématu Co je nového ve verzi 2.0.

Vnořené vlastnosti

Parent Property Typ Required Default
entities.{entity-name}.fields[] name řetězec ✔️ Ano None
entities.{entity-name}.fields[] alias řetězec ❌ Ne None
entities.{entity-name}.fields[] description řetězec ❌ Ne None
entities.{entity-name}.fields[] primary-key boolean ❌ Ne false

Format

{
  "entities": {
    "{entity-name}": {
      "fields": [
        {
          "name": "<database-field-name>",
          "alias": "<api-exposed-name>",
          "description": "<string>",
          "primary-key": <boolean>
        }
      ]
    }
  }
}

Example

{
  "entities": {
    "Book": {
      "source": {
        "object": "dbo.books",
        "type": "table"
      },
      "fields": [
        {
          "name": "id",
          "description": "Unique book identifier",
          "primary-key": true
        },
        {
          "name": "sku_title",
          "alias": "title",
          "description": "The display title of the book"
        },
        {
          "name": "sku_status",
          "alias": "status"
        }
      ]
    }
  }
}

V tomto příkladu id je určen jako primární klíč (nahrazuje potřebu source.key-fields), zatímco sku_title a sku_status jsou aliasovány jako title a status (nahrazuje potřebu mappings).

Important

Schéma vynucuje, že fields nemůže existovat současně mappings nebo source.key-fields ve stejné entitě. Migrujte na fields zastaralé vlastnosti a odeberte je.

Mapování (entity s názvem entity)

Výstraha

Vlastnost mappings je v JAZYCE DAB 2.0 zastaralá. fields Místo toho použijte pole s alias vlastností. Schéma to vynucuje fields a mappings nemůže existovat ve stejné entitě.

Parent Property Typ Required Default
entities.{entity-name} mappings objekt ❌ Ne None

Povolí pro pole databázových objektů vlastní aliasy nebo vystavené názvy.

Important

U entit s povoleným GraphQL musí nakonfigurovaný vystavený název splňovat požadavky na název GraphQL.

Format

{
  "entities": {
    "{entity-name}": {
      "mappings": {
        "<field-1-name>": "<field-1-alias>",
        "<field-2-name>": "<field-2-alias>",
        "<field-3-name>": "<field-3-alias>"
      }
    }
  }
}

Examples

Tabulka databáze

CREATE TABLE Books
(
  id INT,
  sku_title VARCHAR(50),
  sku_status VARCHAR(50),
)

Configuration

{
  "entities": {
    "Books": {
      ...
      "mappings": {
        "sku_title": "title",
        "sku_status": "status"
      }
    }
  }
}

Mezipaměť (entity s názvem entity)

Parent Property Typ Required Default
entities.{entity-name} cache objekt ❌ Ne None

Povolí a nakonfiguruje ukládání do mezipaměti pro entitu.

Vnořené vlastnosti

Parent Property Typ Required Default
entities.{entity-name}.cache enabled boolean ❌ Ne False
entities.{entity-name}.cache ttl-seconds integer ❌ Ne -
entities.{entity-name}.cache level enum (L1 | L1L2) ❌ Ne L1L2

Format

{
  "entities": {
    "{entity-name}": {
      "cache": {
        "enabled": <true> (default) | <false>,
        "ttl-seconds": <integer; default: 5>,
        "level": <"L1" | "L1L2"> (default: "L1L2")
      }
    }
  }
}

Vlastnosti level řídí, které úrovně mezipaměti se používají:

Hodnota Description
L1 Pouze mezipaměť v paměti. Nejrychlejší, ale nesdílený mezi instancemi.
L1L2 Mezipaměť v paměti plus distribuovaná mezipaměť (Redis). Sdíleno napříč instancemi s horizontálním navýšením kapacity Výchozí.

Note

Funkce tvůrce rozhraní Data API 2.0 popsané v této části jsou aktuálně ve verzi Preview a můžou se změnit před obecnou dostupností. Další informace najdete v tématu Co je nového ve verzi 2.0.

Note

Pokud nezadáte, ttl-seconds zdědí globální hodnotu nastavenou v části runtime.cache.

Example

{
  "entities": {
    "Author": {
      "cache": {
        "enabled": true,
        "ttl-seconds": 30,
        "level": "L1"
      }
    }
  }
}

Relace (entity s názvem entity)

Parent Property Typ Required Default
entities.{entity-name} relationships objekt ❌ Ne None

Konfiguruje, jak entity GraphQL souvisejí s dalšími vystavené entitami. Další informace najdete v tématu rozpis relací tvůrce rozhraní Data API.

Note

Vlastnost relationship-name pro každou relaci musí být pro každou entitu jedinečná.

Vnořené vlastnosti

Tyto vlastnosti se používají v různých kombinacích v závislosti na kardinalitě relace.

Parent Property Typ Required Default
entities.{entity-name}.relationships cardinality řetězec ✔️ Ano None
entities.{entity-name}.relationships target.entity řetězec ✔️ Ano None
entities.{entity-name}.relationships target.fields Řetězcové pole ❌ Ne None
entities.{entity-name}.relationships source.fields Řetězcové pole ❌ Ne None
entities.{entity-name}.relationships linking.object řetězec ❌ Ne None
entities.{entity-name}.relationships linking.source.fields Řetězcové pole ❌ Ne None
entities.{entity-name}.relationships linking.target.fields Řetězcové pole ❌ Ne None

Format

{
  "entities": {
    "{entity-name}": {
      "relationships": {
        "<relationship-name>": {
          "cardinality": "one" | "many",
          "target.entity": "<string>",
          "source.fields": ["<string>"],
          "target.fields": ["<string>"],
          "linking.object": "<string>",
          "linking.source.fields": ["<string>"],
          "linking.target.fields": ["<string>"]
        }
      }
    }
  }
}
Relationship Cardinality Example
one-to-many many Jedna entita kategorie může souviset s mnoha entitami úkolů.
many-to-one one Mnoho entit úkolů může souviset s jednou entitou kategorie.
many-to-many many Jedna entita úkolů může souviset s mnoha entitami uživatelů a jedna entita uživatele může souviset s mnoha entitami úkolů.

Příklad: Kardinalita 1:1

Každý Profile souvisí s přesně jedním Usera každý User má přesně jeden související Profile.

{
  "entities": {
    "User": {
      "relationships": {
        "user_profile": {
          "cardinality": "one",
          "target.entity": "Profile",
          "source.fields": [ "id" ],
          "target.fields": [ "user_id" ]
        }
      }
    },
    "Profile": {
      ...
    }
  }
}

Schéma GraphQL

type User
{
  id: Int!
  ...
  profile: Profile
}

Command-line

dab update User \
  --relationship profile \
  --target.entity Profile \
  --cardinality one \
  --relationship.fields "id:user_id"

Příklad: Kardinalita 1:N

A Category může mít jednu nebo více souvisejících Book entit, zatímco každá z nich Book může mít jednu související Category.

{
  "entities": {
    "Book": {
      ...
    },
    "Category": {
      "relationships": {
        "category_books": {
          "cardinality": "many",
          "target.entity": "Book",
          "source.fields": [ "id" ],
          "target.fields": [ "category_id" ]
        }
      }
    }
  }
}

Schéma GraphQL

type Category
{
  id: Int!
  ...
  books: [BookConnection]!
}

Příkazový řádek

dab update Category \
  --relationship category_books \
  --target.entity Book \
  --cardinality many \
  --relationship.fields "id:category_id"

Příklad: Kardinalita M:1

Mnoho Book entit může mít jednu související Category, zatímco Category může mít jednu nebo více souvisejících Book položek.

{
  "entities": {
    "Book": {
      "relationships": {
        "books_category": {
          "cardinality": "one",
          "target.entity": "Category",
          "source.fields": [ "category_id" ],
          "target.fields": [ "id" ]
        }
      },
      "Category": {
        ...
      }
    }
  }
}

Schéma GraphQL

type Book
{
  id: Int!
  ...
  category: Category
}

Příkazový řádek

dab update Book \
  --relationship books_category \
  --target.entity "Category" \
  --cardinality one \
  --relationship.fields "category_id:id"

Příklad: Kardinalita M:N

Mnoho Book entit může mít mnoho souvisejících Author entit, zatímco mnoho Author entit může mít mnoho souvisejících Book položek.

Note

Tato relace je možná s třetí tabulkou, dbo.books_authorskterou označujeme jako odkazující objekt.

{
  "entities": {
    "Book": {
      "relationships": {
        ...,
        "books_authors": {
          "cardinality": "many",
          "target.entity": "Author",
          "source.fields": [ "id" ],
          "target.fields": [ "id" ],
          "linking.object": "dbo.books_authors",
          "linking.source.fields": [ "book_id" ],
          "linking.target.fields": [ "author_id" ]
        }
      },
      "Category": {
        ...
      },
      "Author": {
        ...
      }
    }
  }
}

Schéma GraphQL

type Book
{
  id: Int!
  ...
  authors: [AuthorConnection]!
}

type Author
{
  id: Int!
  ...
  books: [BookConnection]!
}

Příkazový řádek

dab update Book \
  --relationship books_authors \
  --target.entity "Author" \
  --cardinality many \
  --relationship.fields "id:id" \
  --linking.object "dbo.books_authors" \
  --linking.source.fields "book_id" \
  --linking.target.fields "author_id"

Stav (entity s názvem entity)

Parent Property Typ Required Default
entities.{entity-name} health objekt ❌ Ne None

Povolí a nakonfiguruje kontroly stavu pro entitu.

Vnořené vlastnosti

Parent Property Typ Required Default
entities.{entity-name}.health enabled boolean ❌ Ne true
entities.{entity-name}.health first integer ❌ Ne 100
entities.{entity-name}.health threshold-ms integer ❌ Ne 1000

Example

{
  "entities": {
    "Book": {
      "health": {
        "enabled": true,
        "first": 3,
        "threshold-ms": 500
      }
    }
  }
}

Note

Hodnota first musí být menší nebo rovna runtime.pagination.max-page-size nastavení. Menší hodnoty pomáhají rychleji provádět kontroly stavu.

Important

Uložené procedury jsou automaticky vyloučeny z kontrol stavu entit, protože vyžadují parametry a nemusí být deterministické.

MCP (entity s názvem entity)

Parent Property Typ Required Default
entities.{entity-name} mcp objekt ❌ Ne povoleno ve výchozím nastavení při vynechání

Řídí účast MCP pro entitu. Pokud je mcp povolen globálně, entity se ve výchozím nastavení účastní. Tato vlastnost slouží k odhlášení nebo povolení vlastních nástrojů MCP pro entity uložených procedur.

Note

Funkce tvůrce rozhraní Data API 2.0 popsané v této části jsou aktuálně ve verzi Preview a můžou se změnit před obecnou dostupností. Další informace najdete v tématu Co je nového ve verzi 2.0.

Formát objektu

K podrobnému řízení použijte formát objektu:

Parent Property Typ Required Default
entities.{entity-name}.mcp dml-tools boolean ❌ Ne true
entities.{entity-name}.mcp custom-tool boolean ❌ Ne false
{
  "entities": {
    "Book": {
      "mcp": {
        "dml-tools": true
      }
    }
  }
}

Vlastní nástroj (pouze uložené procedury)

U entit uložených procedur nastavte custom-tool registraci true procedury jako pojmenovaného nástroje MCP:

{
  "entities": {
    "GetBookById": {
      "source": {
        "type": "stored-procedure",
        "object": "dbo.get_book_by_id"
      },
      "mcp": {
        "custom-tool": true
      },
      "permissions": [
        {
          "role": "anonymous",
          "actions": ["execute"]
        }
      ]
    }
  }
}

Important

Vlastnost custom-tool je platná pouze pro entity uložené procedury. Když ji nastavíte na tabulku nebo zobrazíte entitu, dojde k chybě konfigurace.

Příklady rozhraní příkazového řádku

dab add Book --source books --permissions "anonymous:*" --mcp.dml-tools true
dab add GetBookById --source dbo.get_book_by_id --source.type stored-procedure --permissions "anonymous:execute" --mcp.custom-tool true