Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Opciones de configuración para entidades de base de datos.
Health
| Property | Description |
|---|---|
entities.entity-name.health.enabled |
Habilita las comprobaciones de estado de la entidad (puntos de conexión REST y GraphQL) |
entities.entity-name.health.first |
Número de filas devueltas en la consulta de comprobación de estado (intervalo: 1-500) |
entities.entity-name.health.threshold-ms |
Duración máxima en milisegundos para la consulta de comprobación de estado (min: Uno) |
Description
| Property | Description |
|---|---|
entities.entity-name.description |
Descripción legible de la entidad |
Campos
| Property | Description |
|---|---|
entities.entity-name.fields[].name |
Nombre del campo de base de datos (obligatorio) |
entities.entity-name.fields[].alias |
Nombre expuesto por LA API (reemplaza las asignaciones) |
entities.entity-name.fields[].description |
Descripción del campo legible |
entities.entity-name.fields[].primary-key |
Marca el campo como clave principal (reemplaza los campos clave) |
Source
| Property | Description |
|---|---|
entities.entity-name.source.type |
Tipo de objeto: table, viewo stored-procedure |
entities.entity-name.source.object |
Nombre del objeto de base de datos |
entities.entity-name.source.object-description |
Descripción legible del objeto de base de datos |
entities.entity-name.source.parameters |
Parámetros para procedimientos almacenados o funciones |
entities.entity-name.source.key-fields |
|
entities.entity-name.mappings |
|
REST
| Property | Description |
|---|---|
entities.entity-name.rest.enabled |
Habilita REST para esta entidad |
entities.entity-name.rest.path |
Ruta personalizada para el punto de conexión REST |
entities.entity-name.rest.methods |
Métodos REST permitidos: get, post, put, patch, , delete |
GraphQL
| Property | Description |
|---|---|
entities.entity-name.graphql.type |
Nombre de tipo u objeto con singular y plural |
entities.entity-name.graphql.operation |
Tipo de operación: query o mutation |
entities.entity-name.graphql.enabled |
Habilita GraphQL para esta entidad |
Permissions
| Property | Description |
|---|---|
entities.entity-name.permissions[].role |
Cadena de nombre de rol |
entities.entity-name.permissions[].actions |
Uno o varios de: 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 |
Nombre de la entidad de destino |
entities.entity-name.relationships.relationship-name.source.fields |
Campos de esta entidad usadas en la relación |
entities.entity-name.relationships.relationship-name.target.fields |
Campos de la entidad de destino |
entities.entity-name.relationships.relationship-name.linking.object |
Objeto join usado para relaciones de varios a varios |
entities.entity-name.relationships.relationship-name.linking.source.fields |
Campos de la entidad de origen usada en combinación |
entities.entity-name.relationships.relationship-name.linking.target.fields |
Campos de la entidad de destino usada en combinación |
Cache
| Property | Description |
|---|---|
entities.entity-name.cache.enabled |
Habilita el almacenamiento en caché de respuestas para la entidad |
entities.entity-name.cache.ttl-seconds |
Tiempo de vida de caché en segundos |
entities.entity-name.cache.level |
Nivel de caché: L1 (solo en memoria) o L1L2 (en memoria + distribuido) |
MCP
| Property | Description |
|---|---|
entities.entity-name.mcp |
Objeto que controla la participación del Protocolo de contexto de modelo (MCP) para la entidad |
entities.entity-name.mcp.dml-tools |
Habilita o deshabilita las herramientas del lenguaje de manipulación de datos (DML) para la entidad |
entities.entity-name.mcp.custom-tool |
Registra el procedimiento almacenado como una herramienta MCP con nombre (solo entidades de procedimiento almacenado) |
Introducción al 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
}
}
}
}
Origen (entidades de nombre de entidad)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
source |
object | ✔️ Sí | None |
Detalles del origen de la base de datos de la entidad.
Propiedades anidadas
| 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 |
matriz de cadena | ❌ No* | None |
entities.{entity-name}.source |
parameters |
matriz u objeto | ❌ No** | None |
*
key-fields solo es necesario cuando type es view y la fields matriz no se usa. El valor representa las claves principales.
Advertencia
La key-fields propiedad está en desuso en DAB 2.0. Use la fields matriz con primary-key: true en su lugar. El esquema exige que fields y key-fields no puedan coexistir en la misma entidad.
**
parameters solo es necesario cuando type es stored-procedure y solo para parámetros con valores predeterminados. El tipo de datos del parámetro se deduce. Los parámetros sin un valor predeterminado se pueden omitir.
object-description es una descripción opcional legible del objeto de base de datos subyacente. Este valor se muestra durante la detección de herramientas de MCP, lo que ayuda a los agentes de inteligencia artificial a comprender el propósito de la entidad.
Tip
Si el objeto pertenece al esquema de dbo, especificar el esquema es opcional. Además, los corchetes alrededor de los nombres de objeto (por ejemplo, dbo.Users frente [dbo].[Users]a ) se pueden usar cuando sea necesario.
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 de matriz de parámetros
En la versión preliminar de DAB 2.0, parameters admite un formato de matriz estructurado con metadatos más completos. Cada parámetro es un objeto con las siguientes propiedades:
| Property | Type | Required | Description |
|---|---|---|---|
name |
string | ✔️ Sí | Nombre del parámetro (sin el @ prefijo) |
required |
boolean | ❌ No | Indica si el parámetro es obligatorio (true) o opcional (false) |
default |
cualquiera | ❌ No | Valor predeterminado que se usa cuando no se proporciona el parámetro |
description |
string | ❌ No | Descripción legible del parámetro |
Ejemplo (formato de matriz, preferido)
{
"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"
}
]
}
}
}
}
Advertencia
El formato de diccionario para parameters (por ejemplo, { "id": 0 }) está en desuso en DAB 2.0. Use el formato de matriz anterior. El formato anterior todavía se acepta por compatibilidad con versiones anteriores, pero se quitará en una versión futura.
Note
La funcionalidad de Data API Builder 2.0 descrita en esta sección se encuentra actualmente en versión preliminar y podría cambiar antes de la disponibilidad general. Para obtener más información, consulte Novedades de la versión 2.0.
Permisos (entidades de nombre de entidad)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.permissions |
role |
string | ✔️ Sí | None |
Especifica el nombre del rol al que se aplican los permisos. Use roles de sistema (Anonymous, Authenticated) o roles personalizados definidos en el proveedor de identidades.
Tip
Para obtener información detallada sobre la evaluación de roles, los roles del sistema y el encabezado, consulte Introducción a laX-MS-API-ROLE autorización.
Format
{
"entities": {
"{entity-name}": {
"permissions": [
{
"role": <"Anonymous" | "Authenticated" | "custom-role">,
"actions": [ <string> ]
}
]
}
}
}
Example
{
"entities": {
"User": {
"permissions": [
{
"role": "reader",
"actions": ["read"]
}
]
}
}
}
Herencia de roles
DAB 2.0 presenta la herencia de roles para los permisos de entidad. Cuando un rol no está configurado explícitamente para una entidad, hereda los permisos de un rol más amplio mediante la cadena siguiente:
named-role → authenticated → anonymous
- Si
authenticatedno está configurado para una entidad, hereda deanonymous. - Si un rol con nombre no está configurado, hereda de
authenticatedo deanonymoussiauthenticatedtambién está ausente.
Esto significa que puede definir permisos una vez en anonymous y cada rol más amplio obtiene automáticamente el mismo acceso, sin que se requiera duplicación.
Note
La funcionalidad de Data API Builder 2.0 descrita en esta sección se encuentra actualmente en versión preliminar y podría cambiar antes de la disponibilidad general. Para obtener más información, consulte Novedades de la versión 2.0.
Example
{
"entities": {
"Book": {
"source": "dbo.books",
"permissions": [
{ "role": "anonymous", "actions": [ "read" ] }
]
}
}
}
Con esta configuración, anonymous, authenticatedy cualquier rol con nombre no configurado puede leer Book. Use dab configure --show-effective-permissions para ver los permisos resueltos para cada entidad después de aplicar la herencia.
Acciones (entidades de nombre de entidad de permisos de matriz de cadenas)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.permissions |
actions |
oneOf [string, array] | ✔️ Sí | None |
Matriz de cadenas que detalla qué operaciones se permiten para el rol asociado.
| Action | Operación SQL |
|---|---|
* |
Todas las acciones |
create |
Insertar una o varias filas* |
read |
Selección de una o varias filas |
update |
Modificar una o varias filas* |
delete |
Eliminar una o varias filas* |
execute |
Ejecuta un procedimiento almacenado |
* Actualmente solo se admiten varias operaciones en GraphQL.
Note
En el caso de los procedimientos almacenados, la acción comodín (*) se expande solo a la acción execute. Para tablas y vistas, se expande a create, read, updatey delete.
Format
{
"entities": {
"{entity-name}": {
"permissions": [
{
"actions": [ <string> ]
}
]
}
}
}
Example
{
"entities": {
"{entity-name}": {
"permissions": [
{
"actions": [ "*" ] // equivalent to create, read, update, delete
}
]
}
}
}
Formato alternativo (solo cadena, cuando type=stored-procedure)
{
"entities": {
"{entity-name}": {
"permissions": [
{
"actions": <string>
}
]
}
}
}
Example
{
"entities": {
"{entity-name}": {
"permissions": [
{
"actions": "*" // equivalent to execute
}
]
}
}
}
Acciones (entidades de nombre de entidad permisos de matriz de objetos)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.permissions |
actions |
matriz de cadena | ✔️ Sí | None |
Matriz de objetos que detalla qué operaciones se permiten para el rol asociado.
Note
En el caso de los procedimientos almacenados, la acción comodín (*) se expande solo a execute. En el caso de las tablas o vistas, se expande a create, read, updatey delete.
Propiedades anidadas
| 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
Esto concede read permiso para auditor en la User entidad, con restricciones de campo y directiva.
{
"entities": {
"User": {
"permissions": [
{
"role": "auditor",
"actions": [
{
"action": "read",
"fields": {
"include": ["*"],
"exclude": ["last_login"]
},
"policy": {
"database": "@item.IsAdmin eq false"
}
}
]
}
]
}
}
}
Notas de la directiva
Las directivas de base de datos filtran los resultados de la consulta mediante predicados de estilo OData. Use @item.<field> para hacer referencia a campos de entidad e @claims.<type> insertar notificaciones de usuario autenticadas.
| Aspecto | Detalles |
|---|---|
| Syntax | Predicados de OData (eq, ne, and, or, gt, lt) |
| Referencia de campo |
@item.<field> (use el nombre asignado si procede) |
| Referencia de notificaciones | @claims.<claimType> |
| Acciones admitidas |
read, , update, delete |
| No está soportado |
create, execute |
Tip
Para obtener instrucciones completas sobre las directivas de base de datos, incluida la sustitución de notificaciones y la solución de problemas, consulte Configuración de directivas de base de datos.
Tipo (entidades de nombre de entidad de GraphQL)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.graphql |
type |
object | ❌ No | {entity-name} |
Establece la convención de nomenclatura de una entidad dentro del esquema de GraphQL.
Format
{
"entities": {
"{entity-name}": {
"graphql": {
"type": {
"singular": "<string>",
"plural": "<string>"
}
}
}
}
}
Propiedades anidadas
| Parent | Property | Required | Type | Default |
|---|---|---|---|---|
entities.{entity-name}.graphql.type |
singular |
✔️ Sí* | string | None |
entities.{entity-name}.graphql.type |
plural |
❌ No | string | N/A (el valor predeterminado es singular) |
*
singular es necesario cuando type se especifica como un objeto . Cuando type es una cadena sin formato, esa cadena se usa como nombre singular.
Example
Configuration
{
"entities": {
"User": {
"graphql": {
"type": {
"singular": "User",
"plural": "Users"
}
}
}
}
}
Consulta de GraphQL
{
Users {
items {
id
name
age
isAdmin
}
}
}
Respuesta de GraphQL
{
"data": {
"Users": {
"items": [
{
"id": 1,
"name": "Alice",
"age": 30,
"isAdmin": true
},
{
"id": 2,
"name": "Bob",
"age": 25,
"isAdmin": false
}
// ...
]
}
}
}
Operación (entidades de nombre de entidad de GraphQL)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.graphql |
operation |
enum string | ❌ No | mutation |
Designa si la stored-procedure operación aparece en o QueryMutation.
Note
Cuando {entity-name}.type se establece en stored-procedure, se crea automáticamente un nuevo tipo executeXXX GraphQL. Esta operation propiedad controla dónde se coloca este tipo en el esquema GraphQL. No hay ningún impacto funcional, solo la higiene del esquema.
Format
{
"entities": {
"{entity-name}": {
"graphql": {
"operation": "query" | "mutation"
}
}
}
}
Ejemplo: operación
Cuando operation se establece en query
type Query {
executeGetUserDetails(userId: Int!): GetUserDetailsResponse
}
Cuando operation se establece en mutation
type Mutation {
executeGetUserDetails(userId: Int!): GetUserDetailsResponse
}
Habilitado (entidades de nombre de entidad de GraphQL)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name}.graphql |
enabled |
boolean | ❌ No | True |
Permite a los desarrolladores incluir de forma selectiva entidades en el esquema graphQL.
Format
{
"entities": {
"{entity-name}": {
"graphql": {
"enabled": <true> (default) | <false>
}
}
}
}
REST (entidades de nombre de entidad)
| 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 |
matriz de cadena | ❌ No* | POST |
* La methods propiedad es solo para stored-procedure los puntos de conexión.
Note
La funcionalidad de Data API Builder 2.0 descrita en esta sección se encuentra actualmente en versión preliminar y podría cambiar antes de la disponibilidad general. Para obtener más información, consulte Novedades de la versión 2.0.
Format
{
"entities": {
"{entity-name}": {
"rest": {
"enabled": <true> (default) | <false>,
"path": <string; default: "{entity-name}">
}
}
}
}
Descripción (entidades de nombre de entidad)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
description |
string | ❌ No | None |
Descripción opcional legible de la entidad. Este valor aparece en la documentación de API generada y como comentario en el esquema GraphQL.
Note
La funcionalidad de Data API Builder 2.0 descrita en esta sección se encuentra actualmente en versión preliminar y podría cambiar antes de la disponibilidad general. Para obtener más información, consulte Novedades de la versión 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"
}
}
}
}
Campos (entidades de nombre de entidad)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
fields |
array | ❌ No | None |
Define metadatos para campos de base de datos individuales, incluidos alias, descripciones y designaciones de clave principal. La fields matriz reemplaza mappings (a través de la alias propiedad) y source.key-fields (a través de la primary-key propiedad) en una única estructura unificada.
Note
La funcionalidad de Data API Builder 2.0 descrita en esta sección se encuentra actualmente en versión preliminar y podría cambiar antes de la disponibilidad general. Para obtener más información, consulte Novedades de la versión 2.0.
Propiedades anidadas
| 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"
}
]
}
}
}
En este ejemplo, id se designa como la clave principal (reemplazando la necesidad de source.key-fields), mientras que sku_title y tienen un alias como sku_status y titlestatus (reemplazando la necesidad de mappings).
Important
El esquema exige que fields no pueda coexistir con mappings o source.key-fields en la misma entidad. Migre a fields las propiedades en desuso y quitelas.
Asignaciones (entidades de nombre de entidad)
Advertencia
La mappings propiedad está en desuso en DAB 2.0. Use la fields matriz con la alias propiedad en su lugar. El esquema exige que fields y mappings no puedan coexistir en la misma entidad.
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
mappings |
object | ❌ No | None |
Habilita alias personalizados o nombres expuestos para campos de objeto de base de datos.
Important
En el caso de las entidades con GraphQL habilitado, el nombre expuesto configurado debe cumplir los requisitos de nombre de 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
Tabla de base de datos
CREATE TABLE Books
(
id INT,
sku_title VARCHAR(50),
sku_status VARCHAR(50),
)
Configuration
{
"entities": {
"Books": {
...
"mappings": {
"sku_title": "title",
"sku_status": "status"
}
}
}
}
Caché (entidades de nombre de entidad)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
cache |
object | ❌ No | None |
Habilita y configura el almacenamiento en caché de la entidad.
Propiedades anidadas
| 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 |
enumeración (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 propiedad controla qué niveles de caché se usan:
| Importancia | Description |
|---|---|
L1 |
Solo caché en memoria. Más rápido, pero no compartido entre instancias. |
L1L2 |
Caché en memoria más caché distribuida (Redis). Compartido entre instancias escaladas horizontalmente. Predeterminado. |
Note
La funcionalidad de Data API Builder 2.0 descrita en esta sección se encuentra actualmente en versión preliminar y podría cambiar antes de la disponibilidad general. Para obtener más información, consulte Novedades de la versión 2.0.
Note
Cuando no se especifica, ttl-seconds hereda el valor global establecido en runtime.cache.
Example
{
"entities": {
"Author": {
"cache": {
"enabled": true,
"ttl-seconds": 30,
"level": "L1"
}
}
}
}
Relaciones (entidades de nombre de entidad)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
relationships |
object | ❌ No | None |
Configura cómo se relacionan las entidades de GraphQL con otras entidades expuestas. Para obtener más información, consulte desglose de las relaciones del generador de datos.
Note
La relationship-name propiedad de cada relación debe ser única en todas las relaciones de esa entidad.
Propiedades anidadas
Estas propiedades se usan en combinaciones diferentes en función de la cardinalidad de la relación.
| 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 |
matriz de cadena | ❌ No | None |
entities.{entity-name}.relationships |
source.fields |
matriz de cadena | ❌ No | None |
entities.{entity-name}.relationships |
linking.object |
string | ❌ No | None |
entities.{entity-name}.relationships |
linking.source.fields |
matriz de cadena | ❌ No | None |
entities.{entity-name}.relationships |
linking.target.fields |
matriz de cadena | ❌ 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 |
Una entidad de categoría puede relacionarse con muchas entidades de tareas pendientes |
| many-to-one | one |
Muchas entidades de tareas pendientes pueden relacionarse con una entidad de categoría |
| many-to-many | many |
Una entidad de tareas pendientes puede relacionarse con muchas entidades de usuario y una entidad de usuario puede relacionarse con muchas entidades de tareas pendientes. |
Ejemplo: Cardinalidad uno a uno
Cada Profile uno está relacionado exactamente con un Usery cada uno User tiene exactamente uno relacionado Profile.
{
"entities": {
"User": {
"relationships": {
"user_profile": {
"cardinality": "one",
"target.entity": "Profile",
"source.fields": [ "id" ],
"target.fields": [ "user_id" ]
}
}
},
"Profile": {
...
}
}
}
Esquema de GraphQL
type User
{
id: Int!
...
profile: Profile
}
Command-line
dab update User \
--relationship profile \
--target.entity Profile \
--cardinality one \
--relationship.fields "id:user_id"
Ejemplo: cardinalidad uno a varios
Un Category puede tener una o varias entidades relacionadas Book , mientras que cada Book una puede tener una relacionada Category.
{
"entities": {
"Book": {
...
},
"Category": {
"relationships": {
"category_books": {
"cardinality": "many",
"target.entity": "Book",
"source.fields": [ "id" ],
"target.fields": [ "category_id" ]
}
}
}
}
}
Esquema de GraphQL
type Category
{
id: Int!
...
books: [BookConnection]!
}
Línea de comandos
dab update Category \
--relationship category_books \
--target.entity Book \
--cardinality many \
--relationship.fields "id:category_id"
Ejemplo: Cardinalidad de varios a uno
Muchas Book entidades pueden tener una relacionada Category, mientras que una Category puede tener una o varias entradas relacionadas Book .
{
"entities": {
"Book": {
"relationships": {
"books_category": {
"cardinality": "one",
"target.entity": "Category",
"source.fields": [ "category_id" ],
"target.fields": [ "id" ]
}
},
"Category": {
...
}
}
}
}
Esquema de GraphQL
type Book
{
id: Int!
...
category: Category
}
Línea de comandos
dab update Book \
--relationship books_category \
--target.entity "Category" \
--cardinality one \
--relationship.fields "category_id:id"
Ejemplo: Cardinalidad de varios a varios
Muchas Book entidades pueden tener muchas entidades relacionadas Author , mientras que muchas entidades pueden tener muchas Author entradas relacionadas Book .
Note
Esta relación es posible con una tercera tabla, , dbo.books_authorsque hacemos referencia a como el objeto de vinculación.
{
"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": {
...
}
}
}
}
Esquema de GraphQL
type Book
{
id: Int!
...
authors: [AuthorConnection]!
}
type Author
{
id: Int!
...
books: [BookConnection]!
}
Línea de comandos
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"
Estado (entidades de nombre de entidad)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
health |
object | ❌ No | None |
Habilita y configura las comprobaciones de estado de la entidad.
Propiedades anidadas
| 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
El first valor debe ser menor o igual que la runtime.pagination.max-page-size configuración. Los valores más pequeños ayudan a que las comprobaciones de estado se completen más rápido.
Important
Los procedimientos almacenados se excluyen automáticamente de las comprobaciones de estado de entidad porque requieren parámetros y podrían no ser deterministas.
MCP (entidades de nombre de entidad)
| Parent | Property | Type | Required | Default |
|---|---|---|---|---|
entities.{entity-name} |
mcp |
object | ❌ No | habilitado de forma predeterminada cuando se omite |
Controla la participación de MCP para la entidad. Cuando MCP está habilitado globalmente, las entidades participan de forma predeterminada. Use esta propiedad para rechazar o habilitar herramientas de MCP personalizadas para entidades de procedimiento almacenado.
Note
La funcionalidad de Data API Builder 2.0 descrita en esta sección se encuentra actualmente en versión preliminar y podría cambiar antes de la disponibilidad general. Para obtener más información, consulte Novedades de la versión 2.0.
Formato de objeto
Use el formato de objeto para el control granular:
| 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
}
}
}
}
Herramienta personalizada (solo procedimientos almacenados)
En el caso de las entidades de procedimiento almacenado, establezca en custom-tooltrue para registrar el procedimiento como una herramienta MCP con nombre:
{
"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 propiedad solo es válida para las entidades de procedimiento almacenado. Si se establece en una tabla o una entidad de vista, se produce un error de configuración.
Ejemplos de la CLI
dab add Book --source books --permissions "anonymous:*" --mcp.dml-tools true
dab add GetBookById --source dbo.get_book_by_id --source.type stored-procedure --permissions "anonymous:execute" --mcp.custom-tool true