Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Impostazioni di configurazione per le entità di database.
Health
| Property | Description |
|---|---|
entities.entity-name.health.enabled |
Abilita i controlli di integrità per l'entità (endpoint REST e GraphQL) |
entities.entity-name.health.first |
Numero di righe restituite nella query di controllo integrità (intervallo: 1-500) |
entities.entity-name.health.threshold-ms |
Durata massima in millisecondi per la query di controllo integrità (min: One) |
Description
| Property | Description |
|---|---|
entities.entity-name.description |
Descrizione leggibile dell'entità |
Fields
| Property | Description |
|---|---|
entities.entity-name.fields[].name |
Nome campo database (obbligatorio) |
entities.entity-name.fields[].alias |
Nome esposto dall'API (sostituisce i mapping) |
entities.entity-name.fields[].description |
Descrizione del campo leggibile |
entities.entity-name.fields[].primary-key |
Contrassegna il campo come chiave primaria (sostituisce key-fields) |
Source
| Property | Description |
|---|---|
entities.entity-name.source.type |
Tipo di oggetto: table, viewo stored-procedure |
entities.entity-name.source.object |
Nome dell'oggetto di database |
entities.entity-name.source.object-description |
Descrizione leggibile dell'oggetto di database |
entities.entity-name.source.parameters |
Parametri per stored procedure o funzioni |
entities.entity-name.source.key-fields |
|
entities.entity-name.mappings |
|
REST
| Property | Description |
|---|---|
entities.entity-name.rest.enabled |
Abilita REST per questa entità |
entities.entity-name.rest.path |
Route personalizzata per l'endpoint REST |
entities.entity-name.rest.methods |
Metodi REST consentiti: get, post, put, patch, delete |
GraphQL
| Property | Description |
|---|---|
entities.entity-name.graphql.type |
Nome del tipo o oggetto con singular e plural |
entities.entity-name.graphql.operation |
Tipo di operazione: query o mutation |
entities.entity-name.graphql.enabled |
Abilita GraphQL per questa entità |
Permissions
| Property | Description |
|---|---|
entities.entity-name.permissions[].role |
Stringa del nome del ruolo |
entities.entity-name.permissions[].actions |
Uno o più di: create, read, update, delete, execute |
Relationships
| Property | Description |
|---|---|
entities.entity-name.relationships.relationship-name.cardinality |
one o many |
entities.entity-name.relationships.relationship-name.target.entity |
Nome dell'entità di destinazione |
entities.entity-name.relationships.relationship-name.source.fields |
Campi di questa entità usata nella relazione |
entities.entity-name.relationships.relationship-name.target.fields |
Campi dall'entità di destinazione |
entities.entity-name.relationships.relationship-name.linking.object |
Oggetto Join utilizzato per le relazioni molti-a-molti |
entities.entity-name.relationships.relationship-name.linking.source.fields |
Campi dell'entità di origine usati nel join |
entities.entity-name.relationships.relationship-name.linking.target.fields |
Campi dell'entità di destinazione usati nel join |
Cache
| Property | Description |
|---|---|
entities.entity-name.cache.enabled |
Abilita la memorizzazione nella cache delle risposte per l'entità |
entities.entity-name.cache.ttl-seconds |
Durata della cache in secondi |
entities.entity-name.cache.level |
Livello cache: L1 (solo in memoria) o L1L2 (in memoria + distribuito) |
MCP
| Property | Description |
|---|---|
entities.entity-name.mcp |
Oggetto che controlla la partecipazione mcp (Model Context Protocol) per l'entità |
entities.entity-name.mcp.dml-tools |
Abilita o disabilita gli strumenti DML (Data Manipulation Language) per l'entità |
entities.entity-name.mcp.custom-tool |
Registra la stored procedure come strumento MCP denominato (solo entità stored procedure) |
Panoramica del formato
{
"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
}
}
}
}
Origine (entità entity-name)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
source |
object | ✔️ Sì | None |
Dettagli dell'origine del database dell'entità.
Proprietà annidate
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.source |
object |
string | ✔️ Sì | None |
entities.{entity-name}.source |
object-description |
string | ❌ No | None |
entities.{entity-name}.source |
type |
enum (table, view, stored-procedure) |
✔️ Sì | None |
entities.{entity-name}.source |
key-fields |
matrice di stringhe | ❌ No* | None |
entities.{entity-name}.source |
parameters |
matrice o oggetto | ❌ No** | None |
*
key-fields è obbligatorio solo quando type è view e la fields matrice non viene usata. Il valore rappresenta le chiavi primarie.
Avviso
La key-fields proprietà è deprecata in DAB 2.0. Usare invece la fields matrice con primary-key: true . Lo schema impone che fields e key-fields non possono coesistere nella stessa entità.
**
parameters è obbligatorio solo quando type è stored-procedure e solo per i parametri con valori predefiniti. Il tipo di dati del parametro viene dedotto. I parametri senza un valore predefinito possono essere omessi.
object-description è una descrizione facoltativa leggibile dell'oggetto di database sottostante. Questo valore viene visualizzato durante l'individuazione degli strumenti MCP, consentendo agli agenti di intelligenza artificiale di comprendere lo scopo dell'entità.
Tip
Se l'oggetto appartiene allo schema dbo, specificare lo schema è facoltativo. Inoltre, le parentesi quadre intorno ai nomi degli oggetti (ad esempio, dbo.Users vs. [dbo].[Users]) possono essere usate quando necessario.
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>"
}
]
}
}
}
}
Formato matrice parametri
Nell'anteprima parameters di DAB 2.0 supporta un formato di matrice strutturato con metadati più avanzati. Ogni parametro è un oggetto con le proprietà seguenti:
| Property | Type | Required | Description |
|---|---|---|---|
name |
string | ✔️ Sì | Nome parametro (senza prefisso @ ) |
required |
boolean | ❌ No | Indica se il parametro è obbligatorio (true) o facoltativo (false) |
default |
any | ❌ No | Valore predefinito usato quando il parametro non viene fornito |
description |
string | ❌ No | Descrizione leggibile del parametro |
Esempio (formato matrice- preferito)
{
"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"
}
]
}
}
}
}
Avviso
Il formato del dizionario per parameters (ad esempio, { "id": 0 }) è deprecato in DAB 2.0. Usare il formato di matrice precedente. Il formato precedente è ancora accettato per la compatibilità con le versioni precedenti, ma verrà rimosso in una versione futura.
Note
La funzionalità Generatore API dati 2.0 descritta in questa sezione è attualmente in anteprima e potrebbe cambiare prima della disponibilità generale. Per altre informazioni, vedere Novità della versione 2.0.
Autorizzazioni (entità entity-name)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.permissions |
role |
string | ✔️ Sì | None |
Specifica il nome del ruolo a cui si applicano le autorizzazioni. Usare i ruoli di sistema (Anonymous, Authenticated) o i ruoli personalizzati definiti nel provider di identità.
Tip
Per informazioni dettagliate sulla valutazione dei ruoli, i ruoli di sistema e l'intestazione, vedere Panoramica dell'autorizzazioneX-MS-API-ROLE.
Format
{
"entities": {
"{entity-name}": {
"permissions": [
{
"role": <"Anonymous" | "Authenticated" | "custom-role">,
"actions": [ <string> ]
}
]
}
}
}
Example
{
"entities": {
"User": {
"permissions": [
{
"role": "reader",
"actions": ["read"]
}
]
}
}
}
Ereditarietà dei ruoli
DAB 2.0 introduce l'ereditarietà dei ruoli per le autorizzazioni di entità. Quando un ruolo non è configurato in modo esplicito per un'entità, eredita le autorizzazioni da un ruolo più ampio usando la catena seguente:
named-role → authenticated → anonymous
- Se
authenticatednon è configurato per un'entità, eredita daanonymous. - Se un ruolo denominato non è configurato, eredita da
authenticatedo daanonymousseauthenticatedè assente.
Ciò significa che è possibile definire le autorizzazioni una sola volta su anonymous e ogni ruolo più ampio ottiene automaticamente lo stesso accesso, senza la duplicazione necessaria.
Note
La funzionalità Generatore API dati 2.0 descritta in questa sezione è attualmente in anteprima e potrebbe cambiare prima della disponibilità generale. Per altre informazioni, vedere Novità della versione 2.0.
Example
{
"entities": {
"Book": {
"source": "dbo.books",
"permissions": [
{ "role": "anonymous", "actions": [ "read" ] }
]
}
}
}
Con questa configurazione, anonymous, authenticatede qualsiasi ruolo denominato non configurato può leggere Booktutti . Usare dab configure --show-effective-permissions per visualizzare le autorizzazioni risolte per ogni entità dopo l'applicazione dell'ereditarietà.
Azioni (entità entity-name per le autorizzazioni di matrice di stringhe)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.permissions |
actions |
oneOf [string, array] | ✔️ Sì | None |
Matrice di stringhe che descrive in dettaglio le operazioni consentite per il ruolo associato.
| Action | Operazione SQL |
|---|---|
* |
Tutte le azioni |
create |
Inserire una o più righe* |
read |
Selezionare una o più righe |
update |
Modificare una o più righe* |
delete |
Eliminare una o più righe* |
execute |
Esegue una stored procedure |
* Attualmente in GraphQL sono supportate più operazioni.
Note
Per le stored procedure, l'azione con caratteri jolly (*) si espande solo all'azione execute. Per tabelle e viste, si espande fino a create, read, updatee delete.
Format
{
"entities": {
"{entity-name}": {
"permissions": [
{
"actions": [ <string> ]
}
]
}
}
}
Example
{
"entities": {
"{entity-name}": {
"permissions": [
{
"actions": [ "*" ] // equivalent to create, read, update, delete
}
]
}
}
}
Formato alternativo (solo stringa, quando type=stored-procedure)
{
"entities": {
"{entity-name}": {
"permissions": [
{
"actions": <string>
}
]
}
}
}
Example
{
"entities": {
"{entity-name}": {
"permissions": [
{
"actions": "*" // equivalent to execute
}
]
}
}
}
Azioni (entità entity-name delle autorizzazioni per le matrici di oggetti)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.permissions |
actions |
matrice di stringhe | ✔️ Sì | None |
Matrice di oggetti che descrive in dettaglio le operazioni consentite per il ruolo associato.
Note
Per le stored procedure, l'azione con caratteri jolly (*) si espande solo execute. Per tabelle/viste, si espande fino a create, read, updatee delete.
Proprietà annidate
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.permissions.actions[] |
action |
string | ✔️ Sì | None |
entities.{entity-name}.permissions.actions[] |
fields |
object | ❌ No | None |
entities.{entity-name}.permissions.actions[] |
policy |
object | ❌ No | None |
entities.{entity-name}.permissions.actions[].policy |
database |
string | ✔️ Sì | None |
Format
{
"entities": {
"{entity-name}": {
"permissions": [
{
"role": <string>,
"actions": [
{
"action": <string>,
"fields": <array of strings>,
"policy": <object>
}
]
}
]
}
}
Example
In questo modo si concede read l'autorizzazione a per l'entitàauditor, con restrizioni relative al campo e ai User criteri.
{
"entities": {
"User": {
"permissions": [
{
"role": "auditor",
"actions": [
{
"action": "read",
"fields": {
"include": ["*"],
"exclude": ["last_login"]
},
"policy": {
"database": "@item.IsAdmin eq false"
}
}
]
}
]
}
}
}
Note sui criteri
I criteri di database filtrano i risultati delle query usando predicati in stile OData. Usare @item.<field> per fare riferimento a campi di entità e @claims.<type> per inserire attestazioni utente autenticate.
| Aspetto | Dettagli |
|---|---|
| Sintassi | Predicati OData (eq, ne, andor, gt, ) lt |
| Informazioni di riferimento sul campo |
@item.<field> (usare il nome mappato, se applicabile) |
| Informazioni di riferimento sulle attestazioni | @claims.<claimType> |
| Azioni supportate |
read, update, delete |
| Non supportato |
create, execute |
Tip
Per indicazioni complete sui criteri di database, inclusa la sostituzione delle attestazioni e la risoluzione dei problemi, vedere Configurare i criteri di database.
Tipo (entità GraphQL entity-name)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.graphql |
type |
object | ❌ No | {entity-name} |
Imposta la convenzione di denominazione per un'entità all'interno dello schema GraphQL.
Format
{
"entities": {
"{entity-name}": {
"graphql": {
"type": {
"singular": "<string>",
"plural": "<string>"
}
}
}
}
}
Proprietà annidate
| Parent | Property | Required | Type | Default |
|---|---|---|---|---|
entities.{entity-name}.graphql.type |
singular |
✔️ Sì* | string | None |
entities.{entity-name}.graphql.type |
plural |
❌ No | string | N/D (per impostazione predefinita è un valore singolare) |
*
singular è obbligatorio quando type viene specificato come oggetto . Quando type è una stringa normale, tale stringa viene usata come nome singolare.
Example
Configuration
{
"entities": {
"User": {
"graphql": {
"type": {
"singular": "User",
"plural": "Users"
}
}
}
}
}
Query GraphQL
{
Users {
items {
id
name
age
isAdmin
}
}
}
Risposta graphQL
{
"data": {
"Users": {
"items": [
{
"id": 1,
"name": "Alice",
"age": 30,
"isAdmin": true
},
{
"id": 2,
"name": "Bob",
"age": 25,
"isAdmin": false
}
// ...
]
}
}
}
Operazione (entità GraphQL entity-name)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.graphql |
operation |
stringa enumerazione | ❌ No | mutation |
Indica se l'operazione stored-procedure viene visualizzata in Query o Mutation.
Note
Quando {entity-name}.type è impostato su stored-procedure, viene creato automaticamente un nuovo tipo executeXXX GraphQL. Questa operation proprietà controlla la posizione di questo tipo nello schema GraphQL. Non c'è alcun impatto funzionale, solo l'igiene dello schema.
Format
{
"entities": {
"{entity-name}": {
"graphql": {
"operation": "query" | "mutation"
}
}
}
}
Esempio: operazione
Quando operation è impostato su query
type Query {
executeGetUserDetails(userId: Int!): GetUserDetailsResponse
}
Quando operation è impostato su mutation
type Mutation {
executeGetUserDetails(userId: Int!): GetUserDetailsResponse
}
Abilitata (entità graphQL entity-name)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.graphql |
enabled |
boolean | ❌ No | True |
Consente agli sviluppatori di includere in modo selettivo le entità nello schema GraphQL.
Format
{
"entities": {
"{entity-name}": {
"graphql": {
"enabled": <true> (default) | <false>
}
}
}
}
REST (entità entity-name)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.rest |
enabled |
boolean | ❌ No | True |
entities.rest |
path |
string | ❌ No | /{entity-name} |
entities.{entity-name}.rest |
methods |
matrice di stringhe | ❌ No* | POST |
* La methods proprietà è solo per stored-procedure gli endpoint.
Note
La funzionalità Generatore API dati 2.0 descritta in questa sezione è attualmente in anteprima e potrebbe cambiare prima della disponibilità generale. Per altre informazioni, vedere Novità della versione 2.0.
Format
{
"entities": {
"{entity-name}": {
"rest": {
"enabled": <true> (default) | <false>,
"path": <string; default: "{entity-name}">
}
}
}
}
Descrizione (entità entity-name)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
description |
string | ❌ No | None |
Descrizione facoltativa leggibile dell'entità. Questo valore viene illustrato nella documentazione dell'API generata e come commento nello schema GraphQL.
Note
La funzionalità Generatore API dati 2.0 descritta in questa sezione è attualmente in anteprima e potrebbe cambiare prima della disponibilità generale. Per altre informazioni, vedere Novità della versione 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"
}
}
}
}
Campi (entità entity-name)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
fields |
array | ❌ No | None |
Definisce i metadati per i singoli campi di database, inclusi alias, descrizioni e designazioni di chiave primaria. La fields matrice sostituisce ( mappings tramite la alias proprietà) e source.key-fields (tramite la primary-key proprietà ) in una singola struttura unificata.
Note
La funzionalità Generatore API dati 2.0 descritta in questa sezione è attualmente in anteprima e potrebbe cambiare prima della disponibilità generale. Per altre informazioni, vedere Novità della versione 2.0.
Proprietà annidate
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.fields[] |
name |
string | ✔️ Sì | None |
entities.{entity-name}.fields[] |
alias |
string | ❌ No | None |
entities.{entity-name}.fields[] |
description |
string | ❌ No | None |
entities.{entity-name}.fields[] |
primary-key |
boolean | ❌ No | 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"
}
]
}
}
}
In questo esempio viene id designato come chiave primaria (sostituendo la necessità di source.key-fields), mentre sku_title e sku_status vengono aliasati come title e status (sostituendo la necessità di mappings).
Important
Lo schema applica che fields non può coesistere con mappings o source.key-fields sulla stessa entità. Eseguire la migrazione e fields rimuovere le proprietà deprecate.
Mapping (entità entity-name)
Avviso
La mappings proprietà è deprecata in DAB 2.0. Usare invece la fields matrice con la alias proprietà . Lo schema impone che fields e mappings non possono coesistere nella stessa entità.
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
mappings |
object | ❌ No | None |
Abilita alias personalizzati o nomi esposti per i campi oggetto di database.
Important
Per le entità con GraphQL abilitato, il nome esposto configurato deve soddisfare i requisiti del nome 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
Tabella di database
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à entity-name)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
cache |
object | ❌ No | None |
Abilita e configura la memorizzazione nella cache per l'entità.
Proprietà annidate
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.cache |
enabled |
boolean | ❌ No | False |
entities.{entity-name}.cache |
ttl-seconds |
integer | ❌ No | - |
entities.{entity-name}.cache |
level |
enumerazione (L1 | L1L2) |
❌ No | L1L2 |
Format
{
"entities": {
"{entity-name}": {
"cache": {
"enabled": <true> (default) | <false>,
"ttl-seconds": <integer; default: 5>,
"level": <"L1" | "L1L2"> (default: "L1L2")
}
}
}
}
La level proprietà controlla quali livelli di cache vengono usati:
| Valore | Description |
|---|---|
L1 |
Solo cache in memoria. Più veloce, ma non condiviso tra istanze. |
L1L2 |
Cache in memoria più cache distribuita (Redis). Condiviso tra istanze con scalabilità orizzontale. Default. |
Note
La funzionalità Generatore API dati 2.0 descritta in questa sezione è attualmente in anteprima e potrebbe cambiare prima della disponibilità generale. Per altre informazioni, vedere Novità della versione 2.0.
Note
Se non specificato, ttl-seconds eredita il valore globale impostato in runtime.cache.
Example
{
"entities": {
"Author": {
"cache": {
"enabled": true,
"ttl-seconds": 30,
"level": "L1"
}
}
}
}
Relazioni (entità entity-name)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
relationships |
object | ❌ No | None |
Configura il modo in cui le entità GraphQL sono correlate ad altre entità esposte. Per altre informazioni, vedere suddivisione delle relazioni del generatore di API dati.
Note
La relationship-name proprietà per ogni relazione deve essere univoca in tutte le relazioni per tale entità.
Proprietà annidate
Queste proprietà vengono usate in combinazioni diverse a seconda della cardinalità della relazione.
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.relationships |
cardinality |
string | ✔️ Sì | None |
entities.{entity-name}.relationships |
target.entity |
string | ✔️ Sì | None |
entities.{entity-name}.relationships |
target.fields |
matrice di stringhe | ❌ No | None |
entities.{entity-name}.relationships |
source.fields |
matrice di stringhe | ❌ No | None |
entities.{entity-name}.relationships |
linking.object |
string | ❌ No | None |
entities.{entity-name}.relationships |
linking.source.fields |
matrice di stringhe | ❌ No | None |
entities.{entity-name}.relationships |
linking.target.fields |
matrice di stringhe | ❌ No | 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 |
Un'entità categoria può essere correlata a molte entità todo |
| many-to-one | one |
Molte entità todo possono essere correlate a un'entità di categoria |
| many-to-many | many |
Un'entità todo può essere correlata a molte entità utente e un'entità utente può essere correlata a molte entità todo |
Esempio: cardinalità uno-a-uno
Ognuno Profile è correlato esattamente a un Useroggetto e ognuno User ha esattamente uno correlato Profile.
{
"entities": {
"User": {
"relationships": {
"user_profile": {
"cardinality": "one",
"target.entity": "Profile",
"source.fields": [ "id" ],
"target.fields": [ "user_id" ]
}
}
},
"Profile": {
...
}
}
}
Schema GraphQL
type User
{
id: Int!
...
profile: Profile
}
Command-line
dab update User \
--relationship profile \
--target.entity Profile \
--cardinality one \
--relationship.fields "id:user_id"
Esempio: cardinalità uno-a-molti
Un Category oggetto può avere una o più entità correlate Book , mentre ognuna Book può avere un oggetto correlato Category.
{
"entities": {
"Book": {
...
},
"Category": {
"relationships": {
"category_books": {
"cardinality": "many",
"target.entity": "Book",
"source.fields": [ "id" ],
"target.fields": [ "category_id" ]
}
}
}
}
}
Schema GraphQL
type Category
{
id: Int!
...
books: [BookConnection]!
}
Riga di comando
dab update Category \
--relationship category_books \
--target.entity Book \
--cardinality many \
--relationship.fields "id:category_id"
Esempio: cardinalità molti-a-uno
Molte Book entità possono avere uno correlato Category, mentre un Category può avere una o più voci correlate Book .
{
"entities": {
"Book": {
"relationships": {
"books_category": {
"cardinality": "one",
"target.entity": "Category",
"source.fields": [ "category_id" ],
"target.fields": [ "id" ]
}
},
"Category": {
...
}
}
}
}
Schema GraphQL
type Book
{
id: Int!
...
category: Category
}
Riga di comando
dab update Book \
--relationship books_category \
--target.entity "Category" \
--cardinality one \
--relationship.fields "category_id:id"
Esempio: cardinalità molti-a-molti
Molte Book entità possono avere molte entità correlate Author , mentre molte Author entità possono avere molte voci correlate Book .
Note
Questa relazione è possibile con una terza tabella, dbo.books_authors, a cui si fa riferimento come oggetto di collegamento.
{
"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": {
...
}
}
}
}
Schema GraphQL
type Book
{
id: Int!
...
authors: [AuthorConnection]!
}
type Author
{
id: Int!
...
books: [BookConnection]!
}
Riga di comando
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"
Integrità (entità entity-name)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
health |
object | ❌ No | None |
Abilita e configura i controlli di integrità per l'entità.
Proprietà annidate
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.health |
enabled |
boolean | ❌ No | true |
entities.{entity-name}.health |
first |
integer | ❌ No | 100 |
entities.{entity-name}.health |
threshold-ms |
integer | ❌ No | 1000 |
Example
{
"entities": {
"Book": {
"health": {
"enabled": true,
"first": 3,
"threshold-ms": 500
}
}
}
}
Note
Il first valore deve essere minore o uguale all'impostazione runtime.pagination.max-page-size . I valori più piccoli consentono di completare i controlli di integrità più velocemente.
Important
Le stored procedure vengono escluse automaticamente dai controlli di integrità delle entità perché richiedono parametri e potrebbero non essere deterministici.
MCP (entità entity-name)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
mcp |
object | ❌ No | abilitato per impostazione predefinita quando viene omesso |
Controlla la partecipazione MCP per l'entità. Quando MCP è abilitato a livello globale, le entità partecipano per impostazione predefinita. Utilizzare questa proprietà per rifiutare esplicitamente o per abilitare strumenti MCP personalizzati per le entità stored procedure.
Note
La funzionalità Generatore API dati 2.0 descritta in questa sezione è attualmente in anteprima e potrebbe cambiare prima della disponibilità generale. Per altre informazioni, vedere Novità della versione 2.0.
Formato oggetto
Usare il formato dell'oggetto per il controllo granulare:
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.mcp |
dml-tools |
boolean | ❌ No | true |
entities.{entity-name}.mcp |
custom-tool |
boolean | ❌ No | false |
{
"entities": {
"Book": {
"mcp": {
"dml-tools": true
}
}
}
}
Strumento personalizzato (solo stored procedure)
Per le entità stored procedure, impostare su custom-tooltrue per registrare la procedura come strumento MCP denominato:
{
"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 proprietà è valida solo per le entità stored procedure. L'impostazione su una tabella o vista dell'entità genera un errore di configurazione.
Esempi dell'interfaccia della riga di comando
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