Dela via


Entities

Konfigurationsinställningar för databasentiteter.

Health

Property Description
entities.entity-name.health.enabled Aktiverar hälsokontroller för entiteten (både REST- och GraphQL-slutpunkter)
entities.entity-name.health.first Antal rader som returneras i hälsokontrollfrågan (intervall: 1–500)
entities.entity-name.health.threshold-ms Maximal varaktighet i millisekunder för hälsokontrollfråga (min: Ett)

Description

Property Description
entities.entity-name.description Läsbar beskrivning av entiteten

Fields

Property Description
entities.entity-name.fields[].name Databasfältnamn (krävs)
entities.entity-name.fields[].alias API-exponerat namn (ersätter mappningar)
entities.entity-name.fields[].description Beskrivning av fält som kan läsas av människor
entities.entity-name.fields[].primary-key Markerar fältet som en primärnyckel (ersätter nyckelfält)

Source

Property Description
entities.entity-name.source.type Objekttyp: table, vieweller stored-procedure
entities.entity-name.source.object Namnet på databasobjektet
entities.entity-name.source.object-description Läsbar beskrivning av databasobjektet
entities.entity-name.source.parameters Parametrar för lagrade procedurer eller funktioner
entities.entity-name.source.key-fields Lista över primära nyckelfält för vyer (inaktuella)
entities.entity-name.mappings Mappar API-fältnamn till databaskolumner (inaktuella)

REST

Property Description
entities.entity-name.rest.enabled Aktiverar REST för den här entiteten
entities.entity-name.rest.path Anpassad väg för REST-slutpunkt
entities.entity-name.rest.methods Tillåtna REST-metoder: get, post, put, , patchdelete

GraphQL

Property Description
entities.entity-name.graphql.type Skriv namn eller objekt med singular och plural
entities.entity-name.graphql.operation Åtgärdstyp: query eller mutation
entities.entity-name.graphql.enabled Aktiverar GraphQL för den här entiteten

Permissions

Property Description
entities.entity-name.permissions[].role Rollnamnssträng
entities.entity-name.permissions[].actions En eller flera av: create, read, update, delete, execute

Relationships

Property Description
entities.entity-name.relationships.relationship-name.cardinality one eller many
entities.entity-name.relationships.relationship-name.target.entity Namn på målentiteten
entities.entity-name.relationships.relationship-name.source.fields Fält från den här entiteten som används i relationen
entities.entity-name.relationships.relationship-name.target.fields Fält från målentitet
entities.entity-name.relationships.relationship-name.linking.object Kopplingsobjekt som används för många-till-många-relationer
entities.entity-name.relationships.relationship-name.linking.source.fields Fält från källentitet som används i koppling
entities.entity-name.relationships.relationship-name.linking.target.fields Fält från målentitet som används i koppling

Cache

Property Description
entities.entity-name.cache.enabled Aktiverar cachelagring av svar för entiteten
entities.entity-name.cache.ttl-seconds Cachelagrade time-to-live i sekunder
entities.entity-name.cache.level Cachenivå: L1 (endast minnesinternt) eller L1L2 (minnesinternt + distribuerat)

MCP

Property Description
entities.entity-name.mcp Objekt som styr MCP-deltagande (Model Context Protocol) för entiteten
entities.entity-name.mcp.dml-tools Aktiverar eller inaktiverar DML-verktyg (datamanipuleringsspråk) för entiteten
entities.entity-name.mcp.custom-tool Registrerar den lagrade proceduren som ett namngivet MCP-verktyg (endast lagrade procedurentiteter)

Formatöversikt

{
  "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
      }
    }
  }
}

Källa (entitetsnamnentiteter)

Parent Property Type Required Default
entities.{entity-name} source object ✔️ Ja None

Databaskällans information om entiteten.

Kapslade egenskaper

Parent Property Type Required Default
entities.{entity-name}.source object string ✔️ Ja None
entities.{entity-name}.source object-description string ❌ Nej None
entities.{entity-name}.source type enum (table, view, stored-procedure) ✔️ Ja None
entities.{entity-name}.source key-fields strängmatris ❌ Nej* None
entities.{entity-name}.source parameters matris eller objekt ❌ Nej** None

* key-fields krävs endast när type är view och matrisen fields inte används. Värdet representerar de primära nycklarna.

Varning

Boendet key-fields är inaktuellt i DAB 2.0. Använd matrisen fields med primary-key: true i stället. Schemat tillämpar detta fields och key-fields kan inte samexistera på samma entitet.

** parameters krävs endast när type är stored-procedure och endast för parametrar med standardvärden. Parameterns datatyp härleds. Parametrar utan standard kan utelämnas.

object-description är en valfri beskrivning av det underliggande databasobjektet som kan läsas av människor. Det här värdet visas under IDENTIFIERING av MCP-verktyg, vilket hjälper AI-agenter att förstå syftet med entiteten.

Tip

Om objektet tillhör dbo schema är det valfritt att ange schemat. Dessutom kan hakparenteser runt objektnamn (till exempel dbo.Users jämfört med [dbo].[Users]) användas vid behov.

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>"
          }
        ]
      }
    }
  }
}

Matrisformat för parametrar

I DAB 2.0-förhandsversionen parameters har stöd för ett strukturerat matrisformat med mer omfattande metadata. Varje parameter är ett objekt med följande egenskaper:

Property Type Required Description
name string ✔️ Ja Parameternamn (utan prefixet @ )
required boolean ❌ Nej Om parametern krävs (true) eller valfri (false)
default någon ❌ Nej Standardvärde som används när parametern inte anges
description string ❌ Nej Beskrivning av parametern som kan läsas av människa

Exempel (matrisformat – föredraget)

{
  "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"
          }
        ]
      }
    }
  }
}

Varning

Ordlisteformatet för parameters (till exempel { "id": 0 }) är inaktuellt i DAB 2.0. Använd föregående matrisformat. Det gamla formatet accepteras fortfarande för bakåtkompatibilitet men tas bort i en framtida version.

Note

Funktionerna i Data API Builder 2.0 som beskrivs i det här avsnittet är för närvarande i förhandsversion och kan komma att ändras före allmän tillgänglighet. Mer information finns i Nyheter i version 2.0.

Behörigheter (entitetsnamnentiteter)

Parent Property Type Required Default
entities.permissions role string ✔️ Ja None

Anger det rollnamn som behörigheter gäller för. Använd systemroller (Anonymous, Authenticated) eller anpassade roller som definierats i din identitetsprovider.

Tip

Detaljerad information om rollutvärdering, systemroller och X-MS-API-ROLE rubriken finns i Översikt över auktorisering.

Format

{
  "entities": {
    "{entity-name}": {
      "permissions": [
        {
          "role": <"Anonymous" | "Authenticated" | "custom-role">,
          "actions": [ <string> ]
        }
      ]
    }
  }
}

Example

{
  "entities": {
    "User": {
      "permissions": [
        {
          "role": "reader",
          "actions": ["read"]
        }
      ]
    }
  }
}

Arv av roll

DAB 2.0 introducerar rollarv för entitetsbehörigheter. När en roll inte uttryckligen har konfigurerats för en entitet ärver den behörigheter från en bredare roll med hjälp av följande kedja:

named-role → authenticated → anonymous
  • Om authenticated inte har konfigurerats för en entitet ärver den från anonymous.
  • Om en namngiven roll inte har konfigurerats ärver den från authenticated, eller från anonymous om authenticated den också saknas.

Det innebär att du kan definiera behörigheter en gång på anonymous och varje bredare roll får samma åtkomst automatiskt, utan duplicering krävs.

Note

Funktionerna i Data API Builder 2.0 som beskrivs i det här avsnittet är för närvarande i förhandsversion och kan komma att ändras före allmän tillgänglighet. Mer information finns i Nyheter i version 2.0.

Example

{
  "entities": {
    "Book": {
      "source": "dbo.books",
      "permissions": [
        { "role": "anonymous", "actions": [ "read" ] }
      ]
    }
  }
}

Med den här konfigurationen anonymouskan , authenticatedoch alla icke-konfigurerade namngivna roller läsa Book. Använd dab configure --show-effective-permissions för att se de lösta behörigheterna för varje entitet efter att arv har tillämpats.

Åtgärder (entitetsnamnsentiteter för strängmatrisbehörigheter)

Parent Property Type Required Default
entities.permissions actions oneOf [sträng, matris] ✔️ Ja None

En strängmatris som beskriver vilka åtgärder som tillåts för den associerade rollen.

Action SQL-åtgärd
* Alla åtgärder
create Infoga en eller flera* rader
read Markera en eller flera rader
update Ändra en eller flera* rader
delete Ta bort en eller flera* rader
execute Kör en lagrad procedur

* Flera åtgärder stöds för närvarande endast i GraphQL.

Note

För lagrade procedurer expanderas åtgärden jokertecken (*) endast till åtgärden execute. För tabeller och vyer expanderas den till create, read, updateoch delete.

Format

{
  "entities": {
    "{entity-name}": {
      "permissions": [
        {
          "actions": [ <string> ]
        }
      ]
    }
  }
}

Example

{
  "entities": {
    "{entity-name}": {
      "permissions": [
        {
          "actions": [ "*" ] // equivalent to create, read, update, delete
        }
      ]
    }
  }
}

Alternativt format (endast sträng, när type=stored-procedure)

{
  "entities": {
    "{entity-name}": {
      "permissions": [
        {
          "actions": <string>
        }
      ]
    }
  }
}

Example

{
  "entities": {
    "{entity-name}": {
      "permissions": [
        {
          "actions": "*" // equivalent to execute
        }
      ]
    }
  }
}

Åtgärder (objektmatrisbehörigheter entitetsnamnentiteter)

Parent Property Type Required Default
entities.{entity-name}.permissions actions strängmatris ✔️ Ja None

En objektmatris som beskriver vilka åtgärder som tillåts för den associerade rollen.

Note

För lagrade procedurer expanderas åtgärden jokertecken (*) till endast execute. För tabeller/vyer expanderas den till create, read, updateoch delete.

Kapslade egenskaper

Parent Property Type Required Default
entities.{entity-name}.permissions.actions[] action string ✔️ Ja None
entities.{entity-name}.permissions.actions[] fields object ❌ Nej None
entities.{entity-name}.permissions.actions[] policy object ❌ Nej 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

Detta ger read behörighet till auditor för entiteten User , med fält- och principbegränsningar.

{
  "entities": {
    "User": {
      "permissions": [
        {
          "role": "auditor",
          "actions": [
            {
              "action": "read",
              "fields": {
                "include": ["*"],
                "exclude": ["last_login"]
              },
              "policy": {
                "database": "@item.IsAdmin eq false"
              }
            }
          ]
        }
      ]
    }
  }
}

Principanteckningar

Databasprinciper filtrerar frågeresultat med hjälp av predikat i OData-stil. Använd @item.<field> för att referera till entitetsfält och @claims.<type> för att mata in autentiserade användaranspråk.

Aspekt Detaljer
Syntax OData-predikat (eq, ne, and, or, gt, ) lt
Fältreferens @item.<field> (använd mappat namn om tillämpligt)
Anspråksreferens @claims.<claimType>
Åtgärder som stöds read, updatedelete
Stöds inte create, execute

Tip

Omfattande vägledning om databasprinciper, inklusive ersättning av anspråk och felsökning, finns i Konfigurera databasprinciper.

Typ (GraphQL-entitetsnamnentiteter)

Parent Property Type Required Default
entities.{entity-name}.graphql type object ❌ Nej {entity-name}

Anger namngivningskonventionen för en entitet i GraphQL-schemat.

Format

{
  "entities": {
    "{entity-name}": {
      "graphql": {
        "type": {
          "singular": "<string>",
          "plural": "<string>"
        }
      }
    }
  }
}

Kapslade egenskaper

Parent Property Required Type Default
entities.{entity-name}.graphql.type singular ✔️ Ja* string None
entities.{entity-name}.graphql.type plural ❌ Nej string N/A (standardvärdet är singularvärde)

* singular krävs när type anges som ett objekt. När type är en vanlig sträng används strängen som singularnamn.

Example

Configuration

{
  "entities": {
    "User": {
      "graphql": {
        "type": {
          "singular": "User",
          "plural": "Users"
        }
      }
    }
  }
}

GraphQL-fråga

{
  Users {
    items {
      id
      name
      age
      isAdmin
    }
  }
}

GraphQL-svar

{
  "data": {
    "Users": {
      "items": [
        {
          "id": 1,
          "name": "Alice",
          "age": 30,
          "isAdmin": true
        },
        {
          "id": 2,
          "name": "Bob",
          "age": 25,
          "isAdmin": false
        }
        // ...
      ]
    }
  }
}

Åtgärd (GraphQL-entitetsnamnentiteter)

Parent Property Type Required Default
entities.{entity-name}.graphql operation uppräkningssträng ❌ Nej mutation

Anger om åtgärden stored-procedure ska visas under Query eller Mutation.

Note

När {entity-name}.type är inställt på stored-procedureskapas automatiskt en ny GraphQL-typ executeXXX . Den här operation egenskapen styr var den här typen placeras i GraphQL-schemat. Det finns ingen funktionspåverkan, bara schemahygien.

Format

{
  "entities": {
    "{entity-name}": {
      "graphql": {
        "operation": "query" | "mutation"
      }
    }
  }
}

Exempel: åtgärd

När operation är inställt på query

type Query {
  executeGetUserDetails(userId: Int!): GetUserDetailsResponse
}

När operation är inställt på mutation

type Mutation {
  executeGetUserDetails(userId: Int!): GetUserDetailsResponse
}

Aktiverad (GraphQL-entitetsnamnentiteter)

Parent Property Type Required Default
entities.{entity-name}.graphql enabled boolean ❌ Nej True

Låter utvecklare selektivt inkludera entiteter i GraphQL-schemat.

Format

{
  "entities": {
    "{entity-name}": {
      "graphql": {
        "enabled": <true> (default) | <false>
      }
    }
  }
}

REST (entitetsnamnentiteter)

Parent Property Type Required Default
entities.{entity-name}.rest enabled boolean ❌ Nej True
entities.rest path string ❌ Nej /{entity-name}
entities.{entity-name}.rest methods strängmatris ❌ Nej* POST

* Egenskapen methods är endast för stored-procedure slutpunkter.

Note

Funktionerna i Data API Builder 2.0 som beskrivs i det här avsnittet är för närvarande i förhandsversion och kan komma att ändras före allmän tillgänglighet. Mer information finns i Nyheter i version 2.0.

Format

{
  "entities": {
    "{entity-name}": {
      "rest": {
        "enabled": <true> (default) | <false>,
        "path": <string; default: "{entity-name}">
      }
    }
  }
}

Beskrivning (entitetsnamnentiteter)

Parent Property Type Required Default
entities.{entity-name} description string ❌ Nej None

En valfri beskrivning av entiteten som kan läsas av människor. Det här värdet visas i den genererade API-dokumentationen och som en kommentar i GraphQL-schemat.

Note

Funktionerna i Data API Builder 2.0 som beskrivs i det här avsnittet är för närvarande i förhandsversion och kan komma att ändras före allmän tillgänglighet. Mer information finns i Nyheter i 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"
      }
    }
  }
}

Fält (entitetsnamnentiteter)

Parent Property Type Required Default
entities.{entity-name} fields array ❌ Nej None

Definierar metadata för enskilda databasfält, inklusive alias, beskrivningar och primärnyckelbeteckningar. Matrisen fields ersätter både mappings (via alias egenskapen) och source.key-fields (via egenskapen primary-key ) i en enda enhetlig struktur.

Note

Funktionerna i Data API Builder 2.0 som beskrivs i det här avsnittet är för närvarande i förhandsversion och kan komma att ändras före allmän tillgänglighet. Mer information finns i Nyheter i version 2.0.

Kapslade egenskaper

Parent Property Type Required Default
entities.{entity-name}.fields[] name string ✔️ Ja None
entities.{entity-name}.fields[] alias string ❌ Nej None
entities.{entity-name}.fields[] description string ❌ Nej None
entities.{entity-name}.fields[] primary-key boolean ❌ Nej 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"
        }
      ]
    }
  }
}

I det här exemplet id anges som primärnyckel (ersätter behovet av source.key-fields), medan sku_title och sku_status aliaseras som title och status (ersätter behovet av mappings).

Important

Schemat tillämpar som fields inte kan samexistera med mappings eller source.key-fields på samma entitet. Migrera till fields och ta bort de inaktuella egenskaperna.

Mappningar (entitetsnamnentiteter)

Varning

Boendet mappings är inaktuellt i DAB 2.0. Använd matrisen fields med egenskapen alias i stället. Schemat tillämpar detta fields och mappings kan inte samexistera på samma entitet.

Parent Property Type Required Default
entities.{entity-name} mappings object ❌ Nej None

Aktiverar anpassade alias eller exponerade namn för databasobjektfält.

Important

För entiteter med GraphQL aktiverat måste det konfigurerade exponerade namnet uppfylla kraven för GraphQL-namn.

Format

{
  "entities": {
    "{entity-name}": {
      "mappings": {
        "<field-1-name>": "<field-1-alias>",
        "<field-2-name>": "<field-2-alias>",
        "<field-3-name>": "<field-3-alias>"
      }
    }
  }
}

Examples

Databastabell

CREATE TABLE Books
(
  id INT,
  sku_title VARCHAR(50),
  sku_status VARCHAR(50),
)

Configuration

{
  "entities": {
    "Books": {
      ...
      "mappings": {
        "sku_title": "title",
        "sku_status": "status"
      }
    }
  }
}

Cacheminne (entitetsnamnentiteter)

Parent Property Type Required Default
entities.{entity-name} cache object ❌ Nej None

Aktiverar och konfigurerar cachelagring för entiteten.

Kapslade egenskaper

Parent Property Type Required Default
entities.{entity-name}.cache enabled boolean ❌ Nej False
entities.{entity-name}.cache ttl-seconds integer ❌ Nej -
entities.{entity-name}.cache level uppräkning (L1 | L1L2) ❌ Nej L1L2

Format

{
  "entities": {
    "{entity-name}": {
      "cache": {
        "enabled": <true> (default) | <false>,
        "ttl-seconds": <integer; default: 5>,
        "level": <"L1" | "L1L2"> (default: "L1L2")
      }
    }
  }
}

Egenskapen level styr vilka cachenivåer som används:

Värde Description
L1 Endast minnesintern cache. Snabbast, men inte delat mellan instanser.
L1L2 Minnesintern cache plus distribuerad cache (Redis). Delas mellan utskalade instanser. Default.

Note

Funktionerna i Data API Builder 2.0 som beskrivs i det här avsnittet är för närvarande i förhandsversion och kan komma att ändras före allmän tillgänglighet. Mer information finns i Nyheter i version 2.0.

Note

När det inte anges ttl-seconds ärver det globala värdet som anges under runtime.cache.

Example

{
  "entities": {
    "Author": {
      "cache": {
        "enabled": true,
        "ttl-seconds": 30,
        "level": "L1"
      }
    }
  }
}

Relationer (entitetsnamnentiteter)

Parent Property Type Required Default
entities.{entity-name} relationships object ❌ Nej None

Konfigurerar hur GraphQL-entiteter är relaterade till andra exponerade entiteter. Mer information finns i Data API builder relationsuppdelning.

Note

Egenskapen relationship-name för varje relation måste vara unik för alla relationer för den entiteten.

Kapslade egenskaper

Dessa egenskaper används i olika kombinationer beroende på relationens kardinalitet.

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 strängmatris ❌ Nej None
entities.{entity-name}.relationships source.fields strängmatris ❌ Nej None
entities.{entity-name}.relationships linking.object string ❌ Nej None
entities.{entity-name}.relationships linking.source.fields strängmatris ❌ Nej None
entities.{entity-name}.relationships linking.target.fields strängmatris ❌ Nej 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 En kategorientitet kan relatera till många att göra-entiteter
many-to-one one Många att göra-entiteter kan relatera till en kategorientitet
many-to-many many En att göra-entitet kan relatera till många användarentiteter, och en användarentitet kan relatera till många att göra-entiteter

Exempel: En-till-en-kardinalitet

Var Profile och en är relaterad till exakt en User, och var User och en har exakt en relaterad 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"

Exempel: Kardinalitet 1-till-många

En Category kan ha en eller flera relaterade Book entiteter, medan var och Book en kan ha en relaterad Category.

{
  "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]!
}

Kommandorad

dab update Category \
  --relationship category_books \
  --target.entity Book \
  --cardinality many \
  --relationship.fields "id:category_id"

Exempel: Kardinalitet många-till-en

Många Book entiteter kan ha en relaterad Category, medan en Category kan ha en eller flera relaterade Book poster.

{
  "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
}

Kommandorad

dab update Book \
  --relationship books_category \
  --target.entity "Category" \
  --cardinality one \
  --relationship.fields "category_id:id"

Exempel: Kardinalitet för många-till-många

Många Book entiteter kan ha många relaterade Author entiteter, medan många Author entiteter kan ha många relaterade Book poster.

Note

Den här relationen är möjlig med en tredje tabell, dbo.books_authors, som vi kallar länkobjektet.

{
  "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]!
}

Kommandorad

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"

Hälsa (entitetsnamnentiteter)

Parent Property Type Required Default
entities.{entity-name} health object ❌ Nej None

Aktiverar och konfigurerar hälsokontroller för entiteten.

Kapslade egenskaper

Parent Property Type Required Default
entities.{entity-name}.health enabled boolean ❌ Nej true
entities.{entity-name}.health first integer ❌ Nej 100
entities.{entity-name}.health threshold-ms integer ❌ Nej 1000

Example

{
  "entities": {
    "Book": {
      "health": {
        "enabled": true,
        "first": 3,
        "threshold-ms": 500
      }
    }
  }
}

Note

Värdet first måste vara mindre än eller lika med inställningen runtime.pagination.max-page-size . Mindre värden hjälper hälsokontroller att slutföras snabbare.

Important

Lagrade procedurer undantas automatiskt från entitetshälsokontroller eftersom de kräver parametrar och kanske inte är deterministiska.

MCP (entitetsnamnentiteter)

Parent Property Type Required Default
entities.{entity-name} mcp object ❌ Nej aktiverad som standard när den utelämnas

Styr MCP-deltagandet för entiteten. När MCP är aktiverat globalt deltar entiteter som standard. Använd den här egenskapen för att välja bort eller för att aktivera anpassade MCP-verktyg för lagrade procedurentiteter.

Note

Funktionerna i Data API Builder 2.0 som beskrivs i det här avsnittet är för närvarande i förhandsversion och kan komma att ändras före allmän tillgänglighet. Mer information finns i Nyheter i version 2.0.

Objektformat

Använd objektformatet för detaljerad kontroll:

Parent Property Type Required Default
entities.{entity-name}.mcp dml-tools boolean ❌ Nej true
entities.{entity-name}.mcp custom-tool boolean ❌ Nej false
{
  "entities": {
    "Book": {
      "mcp": {
        "dml-tools": true
      }
    }
  }
}

Anpassat verktyg (endast lagrade procedurer)

För entiteter med lagrad procedur anger du custom-tool till för att true registrera proceduren som ett namngivet MCP-verktyg:

{
  "entities": {
    "GetBookById": {
      "source": {
        "type": "stored-procedure",
        "object": "dbo.get_book_by_id"
      },
      "mcp": {
        "custom-tool": true
      },
      "permissions": [
        {
          "role": "anonymous",
          "actions": ["execute"]
        }
      ]
    }
  }
}

Important

Egenskapen custom-tool är endast giltig för entiteter med lagrad procedur. Om du ställer in den i en tabell eller visar entitet resulterar det i ett konfigurationsfel.

CLI-exempel

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