Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Paramètres de configuration pour les entités de base de données.
Health
| Property | Description |
|---|---|
entities.entity-name.health.enabled |
Active les vérifications d’intégrité de l’entité (points de terminaison REST et GraphQL) |
entities.entity-name.health.first |
Nombre de lignes retournées dans la requête de contrôle d’intégrité (plage : 1 à 500) |
entities.entity-name.health.threshold-ms |
Durée maximale en millisecondes pour la requête de contrôle d’intégrité (min : One) |
Description
| Property | Description |
|---|---|
entities.entity-name.description |
Description lisible par l’homme de l’entité |
Fields
| Property | Description |
|---|---|
entities.entity-name.fields[].name |
Nom du champ de base de données (obligatoire) |
entities.entity-name.fields[].alias |
Nom exposé à l’API (remplace les mappages) |
entities.entity-name.fields[].description |
Description du champ lisible par l’homme |
entities.entity-name.fields[].primary-key |
Marque le champ en tant que clé primaire (remplace les champs clés) |
Source
| Property | Description |
|---|---|
entities.entity-name.source.type |
Type d’objet : table, viewou stored-procedure |
entities.entity-name.source.object |
Nom de l’objet de base de données |
entities.entity-name.source.object-description |
Description lisible par l’homme de l’objet de base de données |
entities.entity-name.source.parameters |
Paramètres des procédures stockées ou des fonctions |
entities.entity-name.source.key-fields |
|
entities.entity-name.mappings |
|
REST
| Property | Description |
|---|---|
entities.entity-name.rest.enabled |
Active REST pour cette entité |
entities.entity-name.rest.path |
Itinéraire personnalisé pour le point de terminaison REST |
entities.entity-name.rest.methods |
Méthodes REST autorisées : get, , postput, patchdelete |
GraphQL
| Property | Description |
|---|---|
entities.entity-name.graphql.type |
Nom de type ou objet avec singular et plural |
entities.entity-name.graphql.operation |
Type d’opération : query ou mutation |
entities.entity-name.graphql.enabled |
Active GraphQL pour cette entité |
Permissions
| Property | Description |
|---|---|
entities.entity-name.permissions[].role |
Chaîne de nom de rôle |
entities.entity-name.permissions[].actions |
Un ou plusieurs des éléments suivants : create, read, update, delete, execute |
Relationships
| Property | Description |
|---|---|
entities.entity-name.relationships.relationship-name.cardinality |
one ou many |
entities.entity-name.relationships.relationship-name.target.entity |
Nom de l’entité cible |
entities.entity-name.relationships.relationship-name.source.fields |
Champs de cette entité utilisée dans la relation |
entities.entity-name.relationships.relationship-name.target.fields |
Champs de l’entité cible |
entities.entity-name.relationships.relationship-name.linking.object |
Objet join utilisé pour les relations plusieurs-à-plusieurs |
entities.entity-name.relationships.relationship-name.linking.source.fields |
Champs de l’entité source utilisée dans la jointure |
entities.entity-name.relationships.relationship-name.linking.target.fields |
Champs de l’entité cible utilisée dans la jointure |
Cache
| Property | Description |
|---|---|
entities.entity-name.cache.enabled |
Active la mise en cache des réponses pour l’entité |
entities.entity-name.cache.ttl-seconds |
Durée de vie du cache en secondes |
entities.entity-name.cache.level |
Niveau du cache : L1 (en mémoire uniquement) ou L1L2 (en mémoire + distribué) |
MCP
| Property | Description |
|---|---|
entities.entity-name.mcp |
Objet qui contrôle la participation mcP (Model Context Protocol) pour l’entité |
entities.entity-name.mcp.dml-tools |
Active ou désactive les outils DML (Data Manipulation Language) pour l’entité |
entities.entity-name.mcp.custom-tool |
Inscrit la procédure stockée en tant qu’outil MCP nommé (entités de procédure stockée uniquement) |
Vue d’ensemble du format
{
"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
}
}
}
}
Source (entités de nom d’entité)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
source |
object | ✔️ Oui | None |
Détails de la source de base de données de l’entité.
Propriétés imbriquées
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.source |
object |
string | ✔️ Oui | None |
entities.{entity-name}.source |
object-description |
string | ❌ Non | None |
entities.{entity-name}.source |
type |
enum (table, , viewstored-procedure) |
✔️ Oui | None |
entities.{entity-name}.source |
key-fields |
tableau de chaînes | ❌ Non* | None |
entities.{entity-name}.source |
parameters |
objet ou tableau | ❌ Non** | None |
*
key-fields n’est nécessaire que lorsque typeview le fields tableau n’est pas utilisé. La valeur représente les clés primaires.
Avertissement
La key-fields propriété est déconseillée dans DAB 2.0. Utilisez plutôt le fields tableau primary-key: true . Le schéma applique cela fields et key-fields ne peut pas coexister sur la même entité.
**
parameters n’est nécessaire que lorsque type c’est stored-procedure et uniquement pour les paramètres avec des valeurs par défaut. Le type de données du paramètre est déduit. Les paramètres sans valeur par défaut peuvent être omis.
object-description est une description facultative lisible par l’homme de l’objet de base de données sous-jacent. Cette valeur est exposée pendant la découverte d’outils MCP, ce qui aide les agents IA à comprendre l’objectif de l’entité.
Tip
Si l’objet appartient au schéma dbo, la spécification du schéma est facultative. En outre, les crochets autour des noms d’objets (par exemple, dbo.Users vs. [dbo].[Users]) peuvent être utilisés lorsque nécessaire.
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>"
}
]
}
}
}
}
Format du tableau de paramètres
Dans la préversion de DAB 2.0, parameters prend en charge un format de tableau structuré avec des métadonnées plus riches. Chaque paramètre est un objet avec les propriétés suivantes :
| Property | Type | Required | Description |
|---|---|---|---|
name |
string | ✔️ Oui | Nom du paramètre (sans préfixe @ ) |
required |
boolean | ❌ Non | Indique si le paramètre est obligatoire (true) ou facultatif (false) |
default |
n'importe quel | ❌ Non | Valeur par défaut utilisée lorsque le paramètre n’est pas fourni |
description |
string | ❌ Non | Description lisible par l’homme du paramètre |
Exemple (format de tableau , préféré)
{
"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"
}
]
}
}
}
}
Avertissement
Le format de dictionnaire pour parameters (par exemple) { "id": 0 }est déconseillé dans DAB 2.0. Utilisez le format de tableau précédent. L’ancien format est toujours accepté pour la compatibilité descendante, mais sera supprimé dans une prochaine version.
Note
La fonctionnalité 2.0 du Générateur d’API de données décrite dans cette section est actuellement en préversion et peut changer avant la disponibilité générale. Pour plus d’informations, consultez Nouveautés de la version 2.0.
Autorisations (entités de nom d’entité)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.permissions |
role |
string | ✔️ Oui | None |
Spécifie le nom du rôle auquel s’appliquent les autorisations. Utilisez des rôles système (Anonymous, Authenticated) ou des rôles personnalisés définis dans votre fournisseur d’identité.
Tip
Pour plus d’informations sur l’évaluation des rôles, les rôles système et l’en-tête, consultez Vue d’ensemble de l’autorisationX-MS-API-ROLE.
Format
{
"entities": {
"{entity-name}": {
"permissions": [
{
"role": <"Anonymous" | "Authenticated" | "custom-role">,
"actions": [ <string> ]
}
]
}
}
}
Example
{
"entities": {
"User": {
"permissions": [
{
"role": "reader",
"actions": ["read"]
}
]
}
}
}
Héritage de rôle
DAB 2.0 introduit l’héritage des rôles pour les autorisations d’entité. Lorsqu’un rôle n’est pas configuré explicitement pour une entité, il hérite des autorisations d’un rôle plus large à l’aide de la chaîne suivante :
named-role → authenticated → anonymous
- S’il
authenticatedn’est pas configuré pour une entité, il hérite deanonymous. - Si un rôle nommé n’est pas configuré, il hérite ou
authenticateds’ilanonymousauthenticatedest également absent.
Cela signifie que vous pouvez définir des autorisations une fois sur anonymous et chaque rôle plus large obtient automatiquement le même accès, sans duplication requise.
Note
La fonctionnalité 2.0 du Générateur d’API de données décrite dans cette section est actuellement en préversion et peut changer avant la disponibilité générale. Pour plus d’informations, consultez Nouveautés de la version 2.0.
Example
{
"entities": {
"Book": {
"source": "dbo.books",
"permissions": [
{ "role": "anonymous", "actions": [ "read" ] }
]
}
}
}
Avec cette configuration, anonymous, authenticatedet tout rôle nommé non configuré peut tous lire Book. Permet dab configure --show-effective-permissions de voir les autorisations résolues pour chaque entité après l’application de l’héritage.
Actions (entités entity-name d’autorisations de tableau de chaînes)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.permissions |
actions |
oneOf [chaîne, tableau] | ✔️ Oui | None |
Tableau de chaînes détaillant les opérations autorisées pour le rôle associé.
| Action | Opération SQL |
|---|---|
* |
Toutes les actions |
create |
Insérer une ou plusieurs lignes* |
read |
Sélectionner une ou plusieurs lignes |
update |
Modifier une ou plusieurs lignes* |
delete |
Supprimer une ou plusieurs lignes* |
execute |
Exécute une procédure stockée |
* Actuellement, plusieurs opérations sont uniquement prises en charge dans GraphQL.
Note
Pour les procédures stockées, l’action générique (*) s’étend uniquement à l’action execute. Pour les tables et les vues, il s’étend à create, read, updateet delete.
Format
{
"entities": {
"{entity-name}": {
"permissions": [
{
"actions": [ <string> ]
}
]
}
}
}
Example
{
"entities": {
"{entity-name}": {
"permissions": [
{
"actions": [ "*" ] // equivalent to create, read, update, delete
}
]
}
}
}
Autre format (chaîne uniquement, quand type=stored-procedure)
{
"entities": {
"{entity-name}": {
"permissions": [
{
"actions": <string>
}
]
}
}
}
Example
{
"entities": {
"{entity-name}": {
"permissions": [
{
"actions": "*" // equivalent to execute
}
]
}
}
}
Actions (entités entity-name d’autorisations de tableau d’objets)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.permissions |
actions |
tableau de chaînes | ✔️ Oui | None |
Tableau d’objets détaillant les opérations autorisées pour le rôle associé.
Note
Pour les procédures stockées, l’action générique (*) s’étend uniquement à execute. Pour les tables/vues, il s’étend à create, read, updateet delete.
Propriétés imbriquées
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.permissions.actions[] |
action |
string | ✔️ Oui | None |
entities.{entity-name}.permissions.actions[] |
fields |
object | ❌ Non | None |
entities.{entity-name}.permissions.actions[] |
policy |
object | ❌ Non | None |
entities.{entity-name}.permissions.actions[].policy |
database |
string | ✔️ Oui | None |
Format
{
"entities": {
"{entity-name}": {
"permissions": [
{
"role": <string>,
"actions": [
{
"action": <string>,
"fields": <array of strings>,
"policy": <object>
}
]
}
]
}
}
Example
Cela accorde read l’autorisation à auditor l’entité User , avec des restrictions de champ et de stratégie.
{
"entities": {
"User": {
"permissions": [
{
"role": "auditor",
"actions": [
{
"action": "read",
"fields": {
"include": ["*"],
"exclude": ["last_login"]
},
"policy": {
"database": "@item.IsAdmin eq false"
}
}
]
}
]
}
}
}
Notes de stratégie
Les stratégies de base de données filtrent les résultats des requêtes à l’aide de prédicats de style OData. Permet @item.<field> de référencer des champs d’entité et @claims.<type> d’injecter des revendications utilisateur authentifiées.
| Aspect | Détails |
|---|---|
| Syntaxe | Prédicats OData (eq, , neand, orgt, lt) |
| Référence de champ |
@item.<field> (utilisez le nom mappé le cas échéant) |
| Référence de revendication | @claims.<claimType> |
| Actions prises en charge |
read, updatedelete |
| Non prise en charge |
create, execute |
Tip
Pour obtenir des conseils complets sur les stratégies de base de données, notamment la substitution de revendication et la résolution des problèmes, consultez Configurer des stratégies de base de données.
Type (entités de nom d’entité GraphQL)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.graphql |
type |
object | ❌ Non | {entity-name} |
Définit la convention d’affectation de noms pour une entité dans le schéma GraphQL.
Format
{
"entities": {
"{entity-name}": {
"graphql": {
"type": {
"singular": "<string>",
"plural": "<string>"
}
}
}
}
}
Propriétés imbriquées
| Parent | Property | Required | Type | Default |
|---|---|---|---|---|
entities.{entity-name}.graphql.type |
singular |
✔️ Oui* | string | None |
entities.{entity-name}.graphql.type |
plural |
❌ Non | string | N/A (valeur par défaut unique) |
*
singular est obligatoire lorsqu’il type est spécifié en tant qu’objet. Lorsqu’il type s’agit d’une chaîne simple, cette chaîne est utilisée comme nom singulier.
Example
Configuration
{
"entities": {
"User": {
"graphql": {
"type": {
"singular": "User",
"plural": "Users"
}
}
}
}
}
Requête GraphQL
{
Users {
items {
id
name
age
isAdmin
}
}
}
Réponse GraphQL
{
"data": {
"Users": {
"items": [
{
"id": 1,
"name": "Alice",
"age": 30,
"isAdmin": true
},
{
"id": 2,
"name": "Bob",
"age": 25,
"isAdmin": false
}
// ...
]
}
}
}
Opération (entités de nom d’entité GraphQL)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.graphql |
operation |
chaîne d’énumération | ❌ Non | mutation |
Indique si l’opération stored-procedure apparaît sous le Query ou Mutation.
Note
Lorsqu’il {entity-name}.type est défini stored-proceduresur , un nouveau type executeXXX GraphQL est créé automatiquement. Cette operation propriété contrôle l’emplacement où ce type est placé dans le schéma GraphQL. Il n’y a aucun impact fonctionnel, juste une hygiène de schéma.
Format
{
"entities": {
"{entity-name}": {
"graphql": {
"operation": "query" | "mutation"
}
}
}
}
Exemple : opération
Quand operation est défini sur query
type Query {
executeGetUserDetails(userId: Int!): GetUserDetailsResponse
}
Quand operation est défini sur mutation
type Mutation {
executeGetUserDetails(userId: Int!): GetUserDetailsResponse
}
Activé (entités de nom d’entité GraphQL)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.graphql |
enabled |
boolean | ❌ Non | True |
Permet aux développeurs d’inclure de manière sélective des entités dans le schéma GraphQL.
Format
{
"entities": {
"{entity-name}": {
"graphql": {
"enabled": <true> (default) | <false>
}
}
}
}
REST (entités de nom d’entité)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.rest |
enabled |
boolean | ❌ Non | True |
entities.rest |
path |
string | ❌ Non | /{entity-name} |
entities.{entity-name}.rest |
methods |
tableau de chaînes | ❌ Non* | POST |
* La methods propriété est uniquement destinée aux stored-procedure points de terminaison.
Note
La fonctionnalité 2.0 du Générateur d’API de données décrite dans cette section est actuellement en préversion et peut changer avant la disponibilité générale. Pour plus d’informations, consultez Nouveautés de la version 2.0.
Format
{
"entities": {
"{entity-name}": {
"rest": {
"enabled": <true> (default) | <false>,
"path": <string; default: "{entity-name}">
}
}
}
}
Description (entités de nom d’entité)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
description |
string | ❌ Non | None |
Description facultative lisible par l’homme de l’entité. Cette valeur est exposée dans la documentation de l’API générée et en tant que commentaire dans le schéma GraphQL.
Note
La fonctionnalité 2.0 du Générateur d’API de données décrite dans cette section est actuellement en préversion et peut changer avant la disponibilité générale. Pour plus d’informations, consultez Nouveautés de la version 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"
}
}
}
}
Champs (entités de nom d’entité)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
fields |
tableau | ❌ Non | None |
Définit les métadonnées des champs de base de données individuels, y compris les alias, les descriptions et les désignations de clé primaire. Le fields tableau remplace les deux mappings (via la alias propriété) et source.key-fields (via la primary-key propriété) dans une structure unifiée unique.
Note
La fonctionnalité 2.0 du Générateur d’API de données décrite dans cette section est actuellement en préversion et peut changer avant la disponibilité générale. Pour plus d’informations, consultez Nouveautés de la version 2.0.
Propriétés imbriquées
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.fields[] |
name |
string | ✔️ Oui | None |
entities.{entity-name}.fields[] |
alias |
string | ❌ Non | None |
entities.{entity-name}.fields[] |
description |
string | ❌ Non | None |
entities.{entity-name}.fields[] |
primary-key |
boolean | ❌ Non | 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"
}
]
}
}
}
Dans cet exemple, id est désigné comme clé primaire (en remplaçant la nécessité), source.key-fieldstandis sku_title qu’elle sku_status est alias et titlestatus (remplacement de la nécessité).mappings
Important
Le schéma applique qui fields ne peut pas coexister avec mappings ou source.key-fields sur la même entité. Migrez vers fields et supprimez les propriétés déconseillées.
Mappages (entités de nom d’entité)
Avertissement
La mappings propriété est déconseillée dans DAB 2.0. Utilisez plutôt le fields tableau avec la alias propriété. Le schéma applique cela fields et mappings ne peut pas coexister sur la même entité.
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
mappings |
object | ❌ Non | None |
Active les alias personnalisés ou les noms exposés pour les champs d’objet de base de données.
Important
Pour les entités avec GraphQL activée, le nom exposé configuré doit répondre aux exigences de nom 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
Table de base de données
CREATE TABLE Books
(
id INT,
sku_title VARCHAR(50),
sku_status VARCHAR(50),
)
Configuration
{
"entities": {
"Books": {
...
"mappings": {
"sku_title": "title",
"sku_status": "status"
}
}
}
}
Cache (entités de nom d’entité)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
cache |
object | ❌ Non | None |
Active et configure la mise en cache de l’entité.
Propriétés imbriquées
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.cache |
enabled |
boolean | ❌ Non | False |
entities.{entity-name}.cache |
ttl-seconds |
integer | ❌ Non | - |
entities.{entity-name}.cache |
level |
enum (L1 | L1L2) |
❌ Non | L1L2 |
Format
{
"entities": {
"{entity-name}": {
"cache": {
"enabled": <true> (default) | <false>,
"ttl-seconds": <integer; default: 5>,
"level": <"L1" | "L1L2"> (default: "L1L2")
}
}
}
}
La propriété contrôle les level niveaux de cache utilisés :
| Valeur | Description |
|---|---|
L1 |
Cache en mémoire uniquement. Le plus rapide, mais pas partagé entre les instances. |
L1L2 |
Cache en mémoire plus cache distribué (Redis). Partagé entre les instances mises à l’échelle. Default. |
Note
La fonctionnalité 2.0 du Générateur d’API de données décrite dans cette section est actuellement en préversion et peut changer avant la disponibilité générale. Pour plus d’informations, consultez Nouveautés de la version 2.0.
Note
Lorsqu’elle n’est pas spécifiée, ttl-seconds hérite de la valeur globale définie sous runtime.cache.
Example
{
"entities": {
"Author": {
"cache": {
"enabled": true,
"ttl-seconds": 30,
"level": "L1"
}
}
}
}
Relations (entités de nom d’entité)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
relationships |
object | ❌ Non | None |
Configure la façon dont les entités GraphQL sont liées à d’autres entités exposées. Pour plus d’informations, consultez répartition des relations du générateur d’API de données.
Note
La relationship-name propriété de chaque relation doit être unique dans toutes les relations de cette entité.
Propriétés imbriquées
Ces propriétés sont utilisées dans différentes combinaisons en fonction de la cardinalité de relation.
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.relationships |
cardinality |
string | ✔️ Oui | None |
entities.{entity-name}.relationships |
target.entity |
string | ✔️ Oui | None |
entities.{entity-name}.relationships |
target.fields |
tableau de chaînes | ❌ Non | None |
entities.{entity-name}.relationships |
source.fields |
tableau de chaînes | ❌ Non | None |
entities.{entity-name}.relationships |
linking.object |
string | ❌ Non | None |
entities.{entity-name}.relationships |
linking.source.fields |
tableau de chaînes | ❌ Non | None |
entities.{entity-name}.relationships |
linking.target.fields |
tableau de chaînes | ❌ Non | 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 |
Une entité de catégorie peut être liée à de nombreuses entités todo |
| many-to-one | one |
De nombreuses entités todo peuvent se rapporter à une entité de catégorie |
| many-to-many | many |
Une entité todo peut être liée à de nombreuses entités utilisateur, et une entité utilisateur peut se rapporter à de nombreuses entités todo |
Exemple : cardinalité un-à-un
Chacun Profile est lié à exactement un User, et chacun User a exactement un associé 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"
Exemple : cardinalité un-à-plusieurs
Un Category peut avoir une ou plusieurs entités associées Book , tandis que chacun Book peut avoir un associé 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]!
}
Ligne de commande
dab update Category \
--relationship category_books \
--target.entity Book \
--cardinality many \
--relationship.fields "id:category_id"
Exemple : cardinalité plusieurs-à-un
De nombreuses Book entités peuvent avoir une entité associée Category, tandis qu’une Category ou plusieurs entrées associées peuvent être associées Book .
{
"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
}
Ligne de commande
dab update Book \
--relationship books_category \
--target.entity "Category" \
--cardinality one \
--relationship.fields "category_id:id"
Exemple : cardinalité plusieurs-à-plusieurs
De nombreuses Book entités peuvent avoir de nombreuses entités associées Author , tandis que de nombreuses Author entités peuvent avoir de nombreuses entrées associées Book .
Note
Cette relation est possible avec une troisième table, dbo.books_authorsque nous appelons l’objet de liaison.
{
"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]!
}
Ligne de commande
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"
Intégrité (entités de nom d’entité)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
health |
object | ❌ Non | None |
Active et configure les vérifications d’intégrité pour l’entité.
Propriétés imbriquées
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.health |
enabled |
boolean | ❌ Non | true |
entities.{entity-name}.health |
first |
integer | ❌ Non | 100 |
entities.{entity-name}.health |
threshold-ms |
integer | ❌ Non | 1000 |
Example
{
"entities": {
"Book": {
"health": {
"enabled": true,
"first": 3,
"threshold-ms": 500
}
}
}
}
Note
La first valeur doit être inférieure ou égale au runtime.pagination.max-page-size paramètre. Les valeurs plus petites aident les contrôles d’intégrité à se terminer plus rapidement.
Important
Les procédures stockées sont automatiquement exclues des contrôles d’intégrité d’entité, car elles nécessitent des paramètres et peuvent ne pas être déterministes.
MCP (entités de nom d’entité)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
mcp |
object | ❌ Non | activé par défaut lorsqu’il est omis |
Contrôle la participation MCP pour l’entité. Lorsque MCP est activé globalement, les entités participent par défaut. Utilisez cette propriété pour désactiver ou activer des outils MCP personnalisés pour les entités de procédure stockée.
Note
La fonctionnalité 2.0 du Générateur d’API de données décrite dans cette section est actuellement en préversion et peut changer avant la disponibilité générale. Pour plus d’informations, consultez Nouveautés de la version 2.0.
Format d’objet
Utilisez le format d’objet pour le contrôle granulaire :
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.mcp |
dml-tools |
boolean | ❌ Non | true |
entities.{entity-name}.mcp |
custom-tool |
boolean | ❌ Non | false |
{
"entities": {
"Book": {
"mcp": {
"dml-tools": true
}
}
}
}
Outil personnalisé (procédures stockées uniquement)
Pour les entités de procédure stockée, définissez custom-tooltrue pour inscrire la procédure en tant qu’outil MCP nommé :
{
"entities": {
"GetBookById": {
"source": {
"type": "stored-procedure",
"object": "dbo.get_book_by_id"
},
"mcp": {
"custom-tool": true
},
"permissions": [
{
"role": "anonymous",
"actions": ["execute"]
}
]
}
}
}
Important
La custom-tool propriété est valide uniquement pour les entités de procédure stockée. La définition de celle-ci sur une table ou une entité d’affichage entraîne une erreur de configuration.
Exemples CLI
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