Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Konfigurationseinstellungen für Datenbankentitäten.
Health
| Property | Description |
|---|---|
entities.entity-name.health.enabled |
Aktiviert Integritätsprüfungen für die Entität (sowohl REST- als auch GraphQL-Endpunkte) |
entities.entity-name.health.first |
Anzahl der in der Integritätsprüfungsabfrage zurückgegebenen Zeilen (Bereich: 1-500) |
entities.entity-name.health.threshold-ms |
Maximale Dauer in Millisekunden für die Integritätsprüfungsabfrage (min: 1) |
Description
| Property | Description |
|---|---|
entities.entity-name.description |
Lesbare Beschreibung der Entität |
Felder
| Property | Description |
|---|---|
entities.entity-name.fields[].name |
Datenbankfeldname (erforderlich) |
entities.entity-name.fields[].alias |
API-verfügbarer Name (ersetzt Zuordnungen) |
entities.entity-name.fields[].description |
Beschreibung des lesbaren Felds |
entities.entity-name.fields[].primary-key |
Markiert das Feld als Primärschlüssel (ersetzt Schlüsselfelder) |
Source
| Property | Description |
|---|---|
entities.entity-name.source.type |
Objekttyp: table, , viewoder stored-procedure |
entities.entity-name.source.object |
Name des Datenbankobjekts |
entities.entity-name.source.object-description |
Lesbare Beschreibung des Datenbankobjekts |
entities.entity-name.source.parameters |
Parameter für gespeicherte Prozeduren oder Funktionen |
entities.entity-name.source.key-fields |
|
entities.entity-name.mappings |
|
REST
| Property | Description |
|---|---|
entities.entity-name.rest.enabled |
Aktiviert REST für diese Entität |
entities.entity-name.rest.path |
Benutzerdefinierte Route für REST-Endpunkt |
entities.entity-name.rest.methods |
Zulässige REST-Methoden: get, , postput, patchdelete |
GraphQL
| Property | Description |
|---|---|
entities.entity-name.graphql.type |
Typname oder Objekt mit singular und plural |
entities.entity-name.graphql.operation |
Vorgangstyp: query oder mutation |
entities.entity-name.graphql.enabled |
Aktiviert GraphQL für diese Entität |
Permissions
| Property | Description |
|---|---|
entities.entity-name.permissions[].role |
Rollennamenzeichenfolge |
entities.entity-name.permissions[].actions |
Eine oder mehrere von: create, read, update, , deleteexecute |
Relationships
| Property | Description |
|---|---|
entities.entity-name.relationships.relationship-name.cardinality |
one oder many |
entities.entity-name.relationships.relationship-name.target.entity |
Name der Zielentität |
entities.entity-name.relationships.relationship-name.source.fields |
Felder aus dieser Entität, die in der Beziehung verwendet werden |
entities.entity-name.relationships.relationship-name.target.fields |
Felder aus Zielentität |
entities.entity-name.relationships.relationship-name.linking.object |
Join-Objekt, das für n:n-Beziehungen verwendet wird |
entities.entity-name.relationships.relationship-name.linking.source.fields |
Felder aus der Quellentität, die in der Verknüpfung verwendet wird |
entities.entity-name.relationships.relationship-name.linking.target.fields |
Felder aus der Zielentität, die in der Verknüpfung verwendet wird |
Cache
| Property | Description |
|---|---|
entities.entity-name.cache.enabled |
Aktiviert das Zwischenspeichern von Antworten für die Entität. |
entities.entity-name.cache.ttl-seconds |
Zwischenspeichern von Zeit-zu-Live-Zeit in Sekunden |
entities.entity-name.cache.level |
Cacheebene: L1 (nur im Arbeitsspeicher) oder L1L2 (im Arbeitsspeicher + verteilt) |
MCP
| Property | Description |
|---|---|
entities.entity-name.mcp |
Objekt, das die Teilnahme am Model Context Protocol (MCP) für die Entität steuert |
entities.entity-name.mcp.dml-tools |
Aktiviert oder deaktiviert Die Tools für die Datenbearbeitungssprache (DATA Manipulation Language, DML) für die Entität |
entities.entity-name.mcp.custom-tool |
Registriert die gespeicherte Prozedur als benanntes MCP-Tool (nur gespeicherte Prozedurentitäten) |
Formatübersicht
{
"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
}
}
}
}
Quelle (Entitätsnamenentitäten)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
source |
object | ✔️ Ja | None |
Die Datenbankquelldetails der Entität.
Verschachtelte Eigenschaften
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.source |
object |
string | ✔️ Ja | None |
entities.{entity-name}.source |
object-description |
string | ❌ Nein | None |
entities.{entity-name}.source |
type |
Enumeration (table, view, stored-procedure) |
✔️ Ja | None |
entities.{entity-name}.source |
key-fields |
Zeichenfolgenarray | ❌ Nein* | None |
entities.{entity-name}.source |
parameters |
Array oder Objekt | ❌ Nein** | None |
*
key-fields ist nur erforderlich, wenn typeview das fields Array nicht verwendet wird. Der Wert stellt die Primärschlüssel dar.
Warnung
Die key-fields Eigenschaft ist in DAB 2.0 veraltet. Verwenden Sie stattdessen das fields Array mit primary-key: true . Das Schema erzwingt dies fields und key-fields kann nicht in derselben Entität vorhanden sein.
**
parameters ist nur erforderlich, wenn type und stored-procedure nur für Parameter mit Standardwerten. Der Datentyp des Parameters wird abgeleitet. Parameter ohne Standard können weggelassen werden.
object-description ist eine optionale, lesbare Beschreibung des zugrunde liegenden Datenbankobjekts. Dieser Wert wird während der MCP-Toolermittlung angezeigt und hilft KI-Agents, den Zweck der Entität zu verstehen.
Tip
Wenn das Objekt zum dbo Schema gehört, ist die Angabe des Schemas optional. Darüber hinaus können eckige Klammern um Objektnamen (z dbo.Users . B. vs. [dbo].[Users]) bei Bedarf verwendet werden.
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>"
}
]
}
}
}
}
Parameterarrayformat
Unterstützt in der DAB 2.0-Vorschau parameters ein strukturiertes Arrayformat mit umfangreicheren Metadaten. Jeder Parameter ist ein Objekt mit den folgenden Eigenschaften:
| Property | Type | Required | Description |
|---|---|---|---|
name |
string | ✔️ Ja | Parametername (ohne Präfix @ ) |
required |
boolean | ❌ Nein | Gibt an, ob der Parameter erforderlich ist (true) oder optional (false) |
default |
Beliebig | ❌ Nein | Standardwert, der verwendet wird, wenn der Parameter nicht angegeben wird |
description |
string | ❌ Nein | Lesbare Beschreibung des Parameters |
Beispiel (Arrayformat – bevorzugt)
{
"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"
}
]
}
}
}
}
Warnung
Das Wörterbuchformat für parameters (z. B { "id": 0 }. ) ist in DAB 2.0 veraltet. Verwenden Sie das vorherige Arrayformat. Das alte Format wird weiterhin aus Gründen der Abwärtskompatibilität akzeptiert, wird aber in einer zukünftigen Version entfernt.
Note
Die in diesem Abschnitt beschriebene Funktionalität des Daten-API-Generators 2.0 befindet sich derzeit in der Vorschau und kann sich vor der allgemeinen Verfügbarkeit ändern. Weitere Informationen finden Sie unter Neuigkeiten in Version 2.0.
Berechtigungen (Entitätsnamenentitäten)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.permissions |
role |
string | ✔️ Ja | None |
Gibt den Rollennamen an, für den Berechtigungen gelten. Verwenden Sie Systemrollen (Anonymous, ) oder benutzerdefinierte Rollen, Authenticateddie in Ihrem Identitätsanbieter definiert sind.
Tip
Ausführliche Informationen zur Rollenauswertung, Systemrollen und zum X-MS-API-ROLE Header finden Sie unter Autorisierungsübersicht.
Format
{
"entities": {
"{entity-name}": {
"permissions": [
{
"role": <"Anonymous" | "Authenticated" | "custom-role">,
"actions": [ <string> ]
}
]
}
}
}
Example
{
"entities": {
"User": {
"permissions": [
{
"role": "reader",
"actions": ["read"]
}
]
}
}
}
Rollenvererbung
DAB 2.0 führt die Rollenvererbung für Entitätsberechtigungen ein. Wenn eine Rolle nicht explizit für eine Entität konfiguriert ist, erbt sie Berechtigungen von einer breiteren Rolle mithilfe der folgenden Kette:
named-role → authenticated → anonymous
- Wenn
authenticatedsie nicht für eine Entität konfiguriert ist, erbt sie vonanonymous. - Wenn eine benannte Rolle nicht konfiguriert ist, erbt sie von
authenticatedoder vonanonymous, wennauthenticatedsie ebenfalls nicht vorhanden ist.
Dies bedeutet, dass Sie Berechtigungen einmal anonymous für und jede breitere Rolle automatisch denselben Zugriff erhält, ohne dass Duplizierung erforderlich ist.
Note
Die in diesem Abschnitt beschriebene Funktionalität des Daten-API-Generators 2.0 befindet sich derzeit in der Vorschau und kann sich vor der allgemeinen Verfügbarkeit ändern. Weitere Informationen finden Sie unter Neuigkeiten in Version 2.0.
Example
{
"entities": {
"Book": {
"source": "dbo.books",
"permissions": [
{ "role": "anonymous", "actions": [ "read" ] }
]
}
}
}
Mit dieser Konfiguration anonymousauthenticatedkönnen alle nicht konfigurierten benannten Rollen gelesen Bookwerden. Hiermit dab configure --show-effective-permissions werden die aufgelösten Berechtigungen für jede Entität angezeigt, nachdem die Vererbung angewendet wurde.
Aktionen (Entitätsentitäten mit Zeichenfolgenarrayberechtigungen)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.permissions |
actions |
oneOf [string, array] | ✔️ Ja | None |
Ein Zeichenfolgenarray, das angibt, welche Vorgänge für die zugeordnete Rolle zulässig sind.
| Action | SQL-Vorgang |
|---|---|
* |
Alle Aktionen |
create |
Einfügen einer oder mehrerer* Zeilen |
read |
Auswählen einer oder mehrerer Zeilen |
update |
Ändern einer oder mehrerer* Zeilen |
delete |
Löschen einer oder mehrerer Zeilen* |
execute |
Führt eine gespeicherte Prozedur aus. |
* Mehrere Vorgänge werden derzeit nur in GraphQL unterstützt.
Note
Bei gespeicherten Prozeduren wird die Aktion "Wildcard(*) nur auf die execute Aktion erweitert. Für Tabellen und Ansichten wird sie auf create, read, updateund deleteerweitert.
Format
{
"entities": {
"{entity-name}": {
"permissions": [
{
"actions": [ <string> ]
}
]
}
}
}
Example
{
"entities": {
"{entity-name}": {
"permissions": [
{
"actions": [ "*" ] // equivalent to create, read, update, delete
}
]
}
}
}
Alternatives Format (nur Zeichenfolge, wenn type=stored-procedure)
{
"entities": {
"{entity-name}": {
"permissions": [
{
"actions": <string>
}
]
}
}
}
Example
{
"entities": {
"{entity-name}": {
"permissions": [
{
"actions": "*" // equivalent to execute
}
]
}
}
}
Aktionen (Entitäten mit Objektarrayberechtigungen)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.permissions |
actions |
Zeichenfolgenarray | ✔️ Ja | None |
Ein Objektarray, das angibt, welche Vorgänge für die zugeordnete Rolle zulässig sind.
Note
Bei gespeicherten Prozeduren wird die Wildcardaktion (*) nur auf executeerweitert. Bei Tabellen/Ansichten wird sie auf create, read, updateund deleteerweitert.
Verschachtelte Eigenschaften
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.permissions.actions[] |
action |
string | ✔️ Ja | None |
entities.{entity-name}.permissions.actions[] |
fields |
object | ❌ Nein | None |
entities.{entity-name}.permissions.actions[] |
policy |
object | ❌ Nein | None |
entities.{entity-name}.permissions.actions[].policy |
database |
string | ✔️ Ja | None |
Format
{
"entities": {
"{entity-name}": {
"permissions": [
{
"role": <string>,
"actions": [
{
"action": <string>,
"fields": <array of strings>,
"policy": <object>
}
]
}
]
}
}
Example
Dadurch wird die Berechtigung für read die auditor Entität mit Feld- und Richtlinieneinschränkungen gewährtUser.
{
"entities": {
"User": {
"permissions": [
{
"role": "auditor",
"actions": [
{
"action": "read",
"fields": {
"include": ["*"],
"exclude": ["last_login"]
},
"policy": {
"database": "@item.IsAdmin eq false"
}
}
]
}
]
}
}
}
Richtliniennotizen
Datenbankrichtlinien filtern Abfrageergebnisse mithilfe von OData-Prädikaten. Dient @item.<field> zum Verweisen auf Entitätsfelder und @claims.<type> zum Einfügen authentifizierter Benutzeransprüche.
| Aspekt | Einzelheiten |
|---|---|
| Syntax | OData-Prädikate (eq, , neand, or, gt, ) lt |
| Feldreferenz |
@item.<field> (verwenden Sie ggf. zugeordneten Namen) |
| Anspruchsreferenz | @claims.<claimType> |
| Unterstützte Aktionen |
read, updatedelete |
| Nicht unterstützt |
create, execute |
Tip
Umfassende Anleitungen zu Datenbankrichtlinien, einschließlich Anspruchsersetzung und Problembehandlung, finden Sie unter Konfigurieren von Datenbankrichtlinien.
Typ (GraphQL-Entitätennamentitäten)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.graphql |
type |
object | ❌ Nein | {entity-name} |
Legt die Benennungskonvention für eine Entität im GraphQL-Schema fest.
Format
{
"entities": {
"{entity-name}": {
"graphql": {
"type": {
"singular": "<string>",
"plural": "<string>"
}
}
}
}
}
Verschachtelte Eigenschaften
| Parent | Property | Required | Type | Default |
|---|---|---|---|---|
entities.{entity-name}.graphql.type |
singular |
✔️ Ja* | string | None |
entities.{entity-name}.graphql.type |
plural |
❌ Nein | string | N/A (Standardwert für singular-Wert) |
*
singular ist erforderlich, wenn type sie als Objekt angegeben wird. Wenn type es sich um eine einfache Zeichenfolge handelt, wird diese Zeichenfolge als Singularname verwendet.
Example
Configuration
{
"entities": {
"User": {
"graphql": {
"type": {
"singular": "User",
"plural": "Users"
}
}
}
}
}
GraphQL-Abfrage
{
Users {
items {
id
name
age
isAdmin
}
}
}
GraphQL-Antwort
{
"data": {
"Users": {
"items": [
{
"id": 1,
"name": "Alice",
"age": 30,
"isAdmin": true
},
{
"id": 2,
"name": "Bob",
"age": 25,
"isAdmin": false
}
// ...
]
}
}
}
Vorgang (GraphQL-Entitätennamentitäten)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.graphql |
operation |
Enumerationszeichenfolge | ❌ Nein | mutation |
Legt fest, ob der stored-procedure Vorgang unter dem oder dem QueryMutation.
Note
Wenn {entity-name}.type dieser auf festgelegt stored-procedureist, wird automatisch ein neuer GraphQL-Typ executeXXX erstellt. Diese operation Eigenschaft steuert, wo dieser Typ im GraphQL-Schema platziert wird. Es gibt keine funktionalen Auswirkungen, nur die Schemahygiene.
Format
{
"entities": {
"{entity-name}": {
"graphql": {
"operation": "query" | "mutation"
}
}
}
}
Beispiel: Vorgang
Wann operation ist auf query
type Query {
executeGetUserDetails(userId: Int!): GetUserDetailsResponse
}
Wann operation ist auf mutation
type Mutation {
executeGetUserDetails(userId: Int!): GetUserDetailsResponse
}
Aktiviert (GraphQL-Entitätennamentitäten)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.graphql |
enabled |
boolean | ❌ Nein | True |
Ermöglicht Entwicklern selektiv das Einschließen von Entitäten im GraphQL-Schema.
Format
{
"entities": {
"{entity-name}": {
"graphql": {
"enabled": <true> (default) | <false>
}
}
}
}
REST (Entitätsnamenentitäten)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.rest |
enabled |
boolean | ❌ Nein | True |
entities.rest |
path |
string | ❌ Nein | /{entity-name} |
entities.{entity-name}.rest |
methods |
Zeichenfolgenarray | ❌ Nein* | POST |
* Die methods Eigenschaft gilt nur für stored-procedure Endpunkte.
Note
Die in diesem Abschnitt beschriebene Funktionalität des Daten-API-Generators 2.0 befindet sich derzeit in der Vorschau und kann sich vor der allgemeinen Verfügbarkeit ändern. Weitere Informationen finden Sie unter Neuigkeiten in Version 2.0.
Format
{
"entities": {
"{entity-name}": {
"rest": {
"enabled": <true> (default) | <false>,
"path": <string; default: "{entity-name}">
}
}
}
}
Beschreibung (Entitätsnamentitäten)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
description |
string | ❌ Nein | None |
Eine optionale, vom Menschen lesbare Beschreibung der Entität. Dieser Wert wird in der generierten API-Dokumentation und als Kommentar im GraphQL-Schema angezeigt.
Note
Die in diesem Abschnitt beschriebene Funktionalität des Daten-API-Generators 2.0 befindet sich derzeit in der Vorschau und kann sich vor der allgemeinen Verfügbarkeit ändern. Weitere Informationen finden Sie unter Neuigkeiten in 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"
}
}
}
}
Felder (Entitätsnamenentitäten)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
fields |
Array | ❌ Nein | None |
Definiert Metadaten für einzelne Datenbankfelder, einschließlich Aliase, Beschreibungen und Primärschlüsselbezeichnungen. Das fields Array ersetzt sowohl (über die mappings Eigenschaft) als alias auch source.key-fields (über die primary-key Eigenschaft) in einer einzigen, einheitlichen Struktur.
Note
Die in diesem Abschnitt beschriebene Funktionalität des Daten-API-Generators 2.0 befindet sich derzeit in der Vorschau und kann sich vor der allgemeinen Verfügbarkeit ändern. Weitere Informationen finden Sie unter Neuigkeiten in Version 2.0.
Verschachtelte Eigenschaften
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.fields[] |
name |
string | ✔️ Ja | None |
entities.{entity-name}.fields[] |
alias |
string | ❌ Nein | None |
entities.{entity-name}.fields[] |
description |
string | ❌ Nein | None |
entities.{entity-name}.fields[] |
primary-key |
boolean | ❌ Nein | 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 diesem Beispiel id wird als Primärschlüssel (ersetzt die Notwendigkeit source.key-fields) angegeben, während sku_title und sku_status als aliased als title und status (ersetzt die Notwendigkeit mappings).
Important
Das Schema erzwingt, das fields nicht mit mappings oder source.key-fields in derselben Entität koexistieren kann. Migrieren Sie zu fields den veralteten Eigenschaften, und entfernen Sie sie.
Zuordnungen (Entitätsnamenentitäten)
Warnung
Die mappings Eigenschaft ist in DAB 2.0 veraltet. Verwenden Sie stattdessen das fields Array mit der alias Eigenschaft. Das Schema erzwingt dies fields und mappings kann nicht in derselben Entität vorhanden sein.
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
mappings |
object | ❌ Nein | None |
Aktiviert benutzerdefinierte Aliase oder offengelegte Namen für Datenbankobjektfelder.
Important
Für Entitäten mit aktivierter GraphQL-Eigenschaft muss der konfigurierte Name der GraphQL-Namensanforderungen entsprechen.
Format
{
"entities": {
"{entity-name}": {
"mappings": {
"<field-1-name>": "<field-1-alias>",
"<field-2-name>": "<field-2-alias>",
"<field-3-name>": "<field-3-alias>"
}
}
}
}
Examples
Datenbanktabelle
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ätsnamenentitäten)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
cache |
object | ❌ Nein | None |
Aktiviert und konfiguriert die Zwischenspeicherung für die Entität.
Verschachtelte Eigenschaften
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.cache |
enabled |
boolean | ❌ Nein | False |
entities.{entity-name}.cache |
ttl-seconds |
integer | ❌ Nein | - |
entities.{entity-name}.cache |
level |
Enumeration (L1 | L1L2) |
❌ Nein | L1L2 |
Format
{
"entities": {
"{entity-name}": {
"cache": {
"enabled": <true> (default) | <false>,
"ttl-seconds": <integer; default: 5>,
"level": <"L1" | "L1L2"> (default: "L1L2")
}
}
}
}
Die level Eigenschaft steuert, welche Cacheebenen verwendet werden:
| Wert | Description |
|---|---|
L1 |
Nur Im Arbeitsspeichercache. Am schnellsten, aber nicht für alle Instanzen freigegeben. |
L1L2 |
Cache im Arbeitsspeicher plus verteilter (Redis)-Cache. Freigegeben für skalierte Instanzen. Standard. |
Note
Die in diesem Abschnitt beschriebene Funktionalität des Daten-API-Generators 2.0 befindet sich derzeit in der Vorschau und kann sich vor der allgemeinen Verfügbarkeit ändern. Weitere Informationen finden Sie unter Neuigkeiten in Version 2.0.
Note
Wenn sie nicht angegeben ist, ttl-seconds erbt der unter festgelegte runtime.cacheglobale Wert.
Example
{
"entities": {
"Author": {
"cache": {
"enabled": true,
"ttl-seconds": 30,
"level": "L1"
}
}
}
}
Beziehungen (Entitätsnamenentitäten)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
relationships |
object | ❌ Nein | None |
Konfiguriert, wie GraphQL-Entitäten mit anderen verfügbar gemachten Entitäten verknüpft sind. Weitere Informationen finden Sie unter Aufschlüsselung von Daten-API-Generator-Beziehungen.
Note
Die relationship-name Eigenschaft für jede Beziehung muss für alle Beziehungen für diese Entität eindeutig sein.
Verschachtelte Eigenschaften
Diese Eigenschaften werden je nach Beziehungskardinalität in unterschiedlichen Kombinationen verwendet.
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.relationships |
cardinality |
string | ✔️ Ja | None |
entities.{entity-name}.relationships |
target.entity |
string | ✔️ Ja | None |
entities.{entity-name}.relationships |
target.fields |
Zeichenfolgenarray | ❌ Nein | None |
entities.{entity-name}.relationships |
source.fields |
Zeichenfolgenarray | ❌ Nein | None |
entities.{entity-name}.relationships |
linking.object |
string | ❌ Nein | None |
entities.{entity-name}.relationships |
linking.source.fields |
Zeichenfolgenarray | ❌ Nein | None |
entities.{entity-name}.relationships |
linking.target.fields |
Zeichenfolgenarray | ❌ Nein | 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 |
Eine Kategorieentität kann sich auf viele Todo-Entitäten beziehen. |
| many-to-one | one |
Viele Todo-Entitäten können sich auf eine Kategorieentität beziehen. |
| many-to-many | many |
Eine Todo-Entität kann sich auf viele Benutzerentitäten beziehen, und eine Benutzerentität kann sich auf viele Todo-Entitäten beziehen. |
Beispiel: 1:1-Kardinalität
Jeder Profile ist mit genau einem Userverknüpften , und jeder User hat genau ein verwandtes .Profile
{
"entities": {
"User": {
"relationships": {
"user_profile": {
"cardinality": "one",
"target.entity": "Profile",
"source.fields": [ "id" ],
"target.fields": [ "user_id" ]
}
}
},
"Profile": {
...
}
}
}
GraphQL-Schema
type User
{
id: Int!
...
profile: Profile
}
Command-line
dab update User \
--relationship profile \
--target.entity Profile \
--cardinality one \
--relationship.fields "id:user_id"
Beispiel: 1:n-Kardinalität
A Category kann eine oder mehrere verwandte Book Entitäten aufweisen, während jedes Book eine verwandte CategoryEntität aufweisen kann.
{
"entities": {
"Book": {
...
},
"Category": {
"relationships": {
"category_books": {
"cardinality": "many",
"target.entity": "Book",
"source.fields": [ "id" ],
"target.fields": [ "category_id" ]
}
}
}
}
}
GraphQL-Schema
type Category
{
id: Int!
...
books: [BookConnection]!
}
Befehlszeile
dab update Category \
--relationship category_books \
--target.entity Book \
--cardinality many \
--relationship.fields "id:category_id"
Beispiel: n:1-Kardinalität
Viele Book Entitäten können eine verwandte CategoryEntität haben, während eine Category oder mehrere verwandte Book Einträge enthalten kann.
{
"entities": {
"Book": {
"relationships": {
"books_category": {
"cardinality": "one",
"target.entity": "Category",
"source.fields": [ "category_id" ],
"target.fields": [ "id" ]
}
},
"Category": {
...
}
}
}
}
GraphQL-Schema
type Book
{
id: Int!
...
category: Category
}
Befehlszeile
dab update Book \
--relationship books_category \
--target.entity "Category" \
--cardinality one \
--relationship.fields "category_id:id"
Beispiel: n:n-Kardinalität
Viele Book Entitäten können viele verwandte Author Entitäten haben, während viele Author Entitäten viele verwandte Book Einträge enthalten können.
Note
Diese Beziehung ist mit einer dritten Tabelle möglich, dbo.books_authorsauf die wir als verknüpfungsobjekt bezeichnen.
{
"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": {
...
}
}
}
}
GraphQL-Schema
type Book
{
id: Int!
...
authors: [AuthorConnection]!
}
type Author
{
id: Int!
...
books: [BookConnection]!
}
Befehlszeile
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ät (Entitätsnamentitäten)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
health |
object | ❌ Nein | None |
Aktiviert und konfiguriert Integritätsprüfungen für die Entität.
Verschachtelte Eigenschaften
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.health |
enabled |
boolean | ❌ Nein | true |
entities.{entity-name}.health |
first |
integer | ❌ Nein | 100 |
entities.{entity-name}.health |
threshold-ms |
integer | ❌ Nein | 1000 |
Example
{
"entities": {
"Book": {
"health": {
"enabled": true,
"first": 3,
"threshold-ms": 500
}
}
}
}
Note
Der first Wert muss kleiner oder gleich der runtime.pagination.max-page-size Einstellung sein. Kleinere Werte helfen, Integritätsprüfungen schneller abzuschließen.
Important
Gespeicherte Prozeduren werden automatisch von Entitätsintegritätsprüfungen ausgeschlossen, da sie Parameter erfordern und möglicherweise nicht deterministisch sind.
MCP (Entitätsnamenentitäten)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
mcp |
object | ❌ Nein | standardmäßig aktiviert, wenn sie weggelassen wird |
Steuert die MCP-Teilnahme für die Entität. Wenn MCP global aktiviert ist, nehmen Entitäten standardmäßig teil. Verwenden Sie diese Eigenschaft, um sich abzumelden oder benutzerdefinierte MCP-Tools für Entitäten gespeicherter Prozeduren zu aktivieren.
Note
Die in diesem Abschnitt beschriebene Funktionalität des Daten-API-Generators 2.0 befindet sich derzeit in der Vorschau und kann sich vor der allgemeinen Verfügbarkeit ändern. Weitere Informationen finden Sie unter Neuigkeiten in Version 2.0.
Objektformat
Verwenden Sie das Objektformat für granulare Steuerung:
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.mcp |
dml-tools |
boolean | ❌ Nein | true |
entities.{entity-name}.mcp |
custom-tool |
boolean | ❌ Nein | false |
{
"entities": {
"Book": {
"mcp": {
"dml-tools": true
}
}
}
}
Benutzerdefiniertes Tool (nur gespeicherte Prozeduren)
Legen Sie für Entitäten für gespeicherte Prozeduren fest, custom-tool dass true die Prozedur als benanntes MCP-Tool registriert werden soll:
{
"entities": {
"GetBookById": {
"source": {
"type": "stored-procedure",
"object": "dbo.get_book_by_id"
},
"mcp": {
"custom-tool": true
},
"permissions": [
{
"role": "anonymous",
"actions": ["execute"]
}
]
}
}
}
Important
Die custom-tool Eigenschaft ist nur für Entitäten gespeicherter Prozeduren gültig. Das Festlegen einer Tabelle oder Ansichtsentität führt zu einem Konfigurationsfehler.
CLI-Beispiele
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