Condividi tramite


Entities

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 Elenco dei campi chiave primaria per le visualizzazioni (deprecato)
entities.entity-name.mappings Esegue il mapping dei nomi dei campi API alle colonne di database (deprecato)

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 authenticated non è configurato per un'entità, eredita da anonymous.
  • Se un ruolo denominato non è configurato, eredita da authenticatedo da anonymous se authenticated è 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