Freigeben über


Entities

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 Liste der Primärschlüsselfelder für Ansichten (veraltet)
entities.entity-name.mappings Ordnet API-Feldnamen Datenbankspalten zu (veraltet)

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 authenticated sie nicht für eine Entität konfiguriert ist, erbt sie von anonymous.
  • Wenn eine benannte Rolle nicht konfiguriert ist, erbt sie von authenticatedoder von anonymous , wenn authenticated sie 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