Azure / Azure/data-api-builder
[Bug]: `autoentities` in a child configuration file (referenced via `data-source-files`) is not recognized — validation fails with "No entities found"
- Dominant language
- C#
- Stars
- 1.5k
- Forks
- 370
- Avg merge
- 3d 17h
- Merged PRs (30d)
- 8
Description
### Description
When using multiple configuration files (one top-level file referencing others via `data-source-files`), `autoentities` defined in a **child** configuration file is not expanded during configuration validation. Validation fails with:
```
Config '.json': No entities found. At least one entity must be defined or discovered from autoentities when a data source is configured.
fail: Config is invalid.
```
The same `autoentities` block works correctly when placed in the **top-level** configuration file. Only child files (referenced through `data-source-files`) are affected.
This appears to contradict the documented multi-file rules, which state that **every** configuration file may satisfy the entities requirement with either `entities` **or** `autoentities`:
> Multiple configuration rules
> - Every configuration file must include the `data-source` property.
> - Every configuration file must include the `entities` property (or autoentities).
(See: Configuration schema reference — "Data source files" / "Multiple configuration rules".)
### Version
Data API builder 2.0.8
### Steps to reproduce
1. Create a top-level config that references a child config and uses `autoentities` itself:
```json
// dab-config.json (top-level)
{
"$schema": "https://github.com/Azure/data-api-builder/releases/download/v2.0.8/dab.draft.schema.json",
"data-source": { "database-type": "mssql", "connection-string": "@env('CONN_A')" },
"data-source-files": [ "dab-config.child.json" ],
"runtime": {
"mcp": { "enabled": true },
"host": { "mode": "production", "authentication": { "provider": "Unauthenticated" } }
},
"autoentities": {
"def-a": {
"patterns": { "name": "a_{object}", "include": [ "dbo.TableOne" ] },
"permissions": [ { "role": "anonymous", "actions": [ { "action": "read" } ] } ]
}
}
}
```
2. Create a child config that uses `autoentities` (no explicit `entities`):
```json
// dab-config.child.json
{
"$schema": "https://github.com/Azure/data-api-builder/releases/download/v2.0.8/dab.draft.schema.json",
"data-source": { "database-type": "mssql", "connection-string": "@env('CONN_B')" },
"autoentities": {
"def-b": {
"patterns": { "name": "b_{object}", "include": [ "dbo.TableTwo" ] },
"permissions": [ { "role": "anonymous", "actions": [ { "action": "read" } ] } ]
}
}
}
```
3. Run validation:
```
dab validate -c dab-config.json
```
### Expected behavior
Validation passes. The child file's `autoentities` is expanded into entities (with the `b_` prefix), exactly as documented and as it works in the top-level file.
### Actual behavior
Validation fails:
```
The config satisfies the schema requirements.
fail: Config '.json': No entities found. At least one entity must be defined or discovered from autoentities when a data source is configured.
fail: Config is invalid.
```
Notes:
- Replacing the child's `autoentities` with explicit `entities` makes validation pass and the multi-database setup works correctly.
- During an earlier (looser) run the child entities did appear in REST-path logging at runtime, yet schema validation still reported "No entities found" — suggesting the autoentities expansion is performed for the top-level config only and skipped for child configs at validation time.
### Workaround
Define explicit `entities` in child configuration files instead of `autoentities`. Keep `autoentities` only in the top-level file.
### Environment
- Data API builder: 2.0.8
- Database type: MSSQL (both data sources)
- OS: Windows
- Scenario: single DAB process serving two databases via `data-source-files`, MCP enabled (stdio)
Contributor guide
Assessment
This issue has not been assessed yet.