Edit

Share via


update command

Update an existing entity definition in the Data API builder configuration file. Use this command to adjust source metadata, permissions, exposure (REST/GraphQL), policies, caching, relationships, mappings, and descriptive metadata after the entity has already been added.

Tip

Use dab add to create new entities, and dab update to evolve them. Field name remapping (--map) is only available in update, not in add.

Syntax

dab update <entity-name> [options]

Quick glance

Option Summary
<entity-name> Required positional argument. Logical entity name.
-c, --config Path to config file. Default resolution applies if omitted.
--description Replace entity description.

Cache

Option Summary
--cache.enabled Enable or disable entity caching.
--cache.ttl Cache time-to-live in seconds.

Fields

Option Summary
--fields.exclude Comma-separated list of excluded fields.
--fields.include Comma-separated list of included fields (* = all).
-m, --map Field mapping pairs name:alias. Replaces entire set.

GraphQL

Option Summary
--graphql GraphQL exposure: false, true, singular, or singular:plural.
--graphql.operation Stored procedures only: query or mutation (default mutation).

Permissions & Policies

Option Summary
--permissions One or more role:actions pairs. Replaces existing list.
--policy-database OData-style filter injected in DB query.
--policy-request Pre-database request filter.

Relationships

Option Summary
--relationship Relationship name. Use with relationship options.
--relationship.fields Field mappings for direct relationships.

REST

Option Summary
--rest REST exposure: false, true, or custom path.
--rest.methods Stored procedures only. Replace allowed HTTP verbs.

Source

Option Summary
-s, --source Underlying database object name.
--source.key-fields Required for views or non-PK tables.
--source.params Stored procedures only. Replace default params.
--source.type Source type: table, view, or stored-procedure.

--cache.enabled

Enable or disable caching for this entity.

Example

dab update Book --cache.enabled true

Resulting config

{
  "entities": {
    "Book": {
      "cache": {
        "enabled": true
      }
    }
  }
}

--cache.ttl

Set cache time-to-live in seconds. Only effective if caching is enabled.

Example

dab update Book --cache.ttl 600

Resulting config

{
  "entities": {
    "Book": {
      "cache": {
        "ttl-seconds": 600
      }
    }
  }
}

Note

Supplying TTL when cache is disabled has no effect until caching is enabled.

--description

Replace entity description.

Example

dab update Book --description "Updated description"

Resulting config

{
  "entities": {
    "Book": {
      "description": "Updated description"
    }
  }
}

--fields.exclude

Comma-separated list of fields to exclude.

Example

dab update Book --fields.exclude "internal_flag,secret_note"

Resulting config

{
  "entities": {
    "Book": {
      "graphql": {
        "fields": {
          "exclude": [ "internal_flag", "secret_note" ]
        }
      }
    }
  }
}

--fields.include

Comma-separated list of fields to include. * includes all fields. Replaces existing include list.

Example

dab update Book --fields.include "id,title,author"

Resulting config

{
  "entities": {
    "Book": {
      "graphql": {
        "fields": {
          "include": [ "id", "title", "author" ]
        }
      }
    }
  }
}

--graphql

Control GraphQL exposure.

Example

dab update Book --graphql book:books

Resulting config

{
  "entities": {
    "Book": {
      "graphql": {
        "singular": "book",
        "plural": "books"
      }
    }
  }
}

--graphql.operation

Stored procedures only. Sets operation type. Default is mutation.

Example

dab update RunReport --graphql.operation query

Resulting config

{
  "entities": {
    "RunReport": {
      "graphql": {
        "operation": "query"
      }
    }
  }
}

Note

Supplying --graphql.operation for tables or views is ignored.

-m, --map

Map database fields to exposed names. Replaces the entire mapping set.

Example

dab update Book --map "id:bookId,title:bookTitle"

Resulting config

{
  "entities": {
    "Book": {
      "mappings": {
        "id": "bookId",
        "title": "bookTitle"
      }
    }
  }
}

Important

Any existing mappings are overwritten. Restate all mappings you want to keep.

--permissions

Replace all permissions with new role/action sets. Repeat flag for multiple roles.

Example

dab update Book --permissions "anonymous:read" --permissions "authenticated:create,read,update"

Resulting config

{
  "entities": {
    "Book": {
      "permissions": [
        {
          "role": "anonymous",
          "actions": [ "read" ]
        },
        {
          "role": "authenticated",
          "actions": [ "create", "read", "update" ]
        }
      ]
    }
  }
}

Important

Permissions replace the existing list. Previous permissions are discarded.

--policy-database

OData-style filter appended to DB query.

Example

dab update Book --policy-database "region eq 'US'"

Resulting config

{
  "entities": {
    "Book": {
      "policies": {
        "database": "region eq 'US'"
      }
    }
  }
}

--policy-request

Request-level policy evaluated before hitting the database.

Example

dab update Book --policy-request "@claims.role == 'admin'"

Resulting config

{
  "entities": {
    "Book": {
      "policies": {
        "request": "@claims.role == 'admin'"
      }
    }
  }
}

--relationship

Define or update a relationship. Use with other relationship options.

Example

dab update Book --relationship publisher --cardinality one --target.entity Publisher --relationship.fields "publisher_id:id"

Resulting config

{
  "entities": {
    "Book": {
      "relationships": {
        "publisher": {
          "cardinality": "one",
          "target.entity": "Publisher",
          "fields": {
            "publisher_id": "id"
          }
        }
      }
    }
  }
}

--relationship.fields

Colon-separated field mappings for direct relationships.

Example

dab update Book --relationship author --cardinality one --target.entity Author --relationship.fields "author_id:id"

Resulting config

{
  "entities": {
    "Book": {
      "relationships": {
        "author": {
          "cardinality": "one",
          "target.entity": "Author",
          "fields": {
            "author_id": "id"
          }
        }
      }
    }
  }
}

--rest

Control REST exposure.

Example

dab update Book --rest BooksApi

Resulting config

{
  "entities": {
    "Book": {
      "rest": {
        "path": "BooksApi"
      }
    }
  }
}

--rest.methods

Stored procedures only. Replace allowed HTTP methods. Defaults to POST.

Example

dab update RunReport --rest true --rest.methods GET,POST

Resulting config

{
  "entities": {
    "RunReport": {
      "rest": {
        "path": "RunReport",
        "methods": [ "GET", "POST" ]
      }
    }
  }
}

Note

Supplying --rest.methods while REST is disabled has no effect.

-s, --source

Update the underlying database object.

Example

dab update Book --source dbo.Books

Resulting config

{
  "entities": {
    "Book": {
      "source": {
        "type": "table",
        "object": "dbo.Books"
      }
    }
  }
}

--source.key-fields

For views or tables without an inferred PK. Replaces existing keys. Not valid for stored procedures.

Example

dab update SalesSummary --source.type view --source.key-fields "year,region"

Resulting config

{
  "entities": {
    "SalesSummary": {
      "source": {
        "type": "view",
        "object": "SalesSummary",
        "keyFields": [ "year", "region" ]
      }
    }
  }
}

Note

Using --source.key-fields with stored procedures is not allowed.

--source.params

Stored procedures only. Replace parameter defaults.

Example

dab update RunReport --source.type stored-procedure --source.params "year:2024,region:west"

Resulting config

{
  "entities": {
    "RunReport": {
      "source": {
        "type": "stored-procedure",
        "object": "RunReport",
        "params": {
          "year": 2024,
          "region": "west"
        }
      }
    }
  }
}

Note

Using --source.params with tables or views is not allowed.

--source.type

Change the source object type.

Example

dab update Book --source.type view

Resulting config

{
  "entities": {
    "Book": {
      "source": {
        "type": "view",
        "object": "Book"
      }
    }
  }
}

Important

Changing source type may invalidate other properties. For example, views always require key-fields; stored procedures cannot define key-fields.