Skip to content

Commit aacd913

Browse files
Prabakaran Annaduraiclaude
andcommitted
feat(dsql): add EF Core / .NET ORM adapter guidance
Document the released Amazon.AuroraDsql.EntityFrameworkCore adapter in the DSQL skill: adapter names, .NET connection notes, and EF Core gotchas (Guid keys, OCC retry, app-layer FK integrity, isolation, migrations). Update SKILL.md routing and add trigger and functional eval coverage. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent 8adddcc commit aacd913

10 files changed

Lines changed: 88 additions & 22 deletions

File tree

.claude-plugin/marketplace.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@
164164
"name": "databases-on-aws",
165165
"source": "./plugins/databases-on-aws",
166166
"tags": ["aws", "database", "aurora", "dsql", "serverless", "postgresql"],
167-
"version": "1.4.0"
167+
"version": "1.5.0"
168168
},
169169
{
170170
"category": "deployment",

plugins/databases-on-aws/.claude-plugin/plugin.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,5 @@
2222
"license": "Apache-2.0",
2323
"name": "databases-on-aws",
2424
"repository": "https://github.com/awslabs/agent-plugins",
25-
"version": "1.4.0"
25+
"version": "1.5.0"
2626
}

plugins/databases-on-aws/.codex-plugin/plugin.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "databases-on-aws",
3-
"version": "1.4.0",
3+
"version": "1.5.0",
44
"description": "Expert database guidance for the AWS database portfolio. Design schemas, execute queries, handle migrations, and choose the right database for your workload.",
55
"author": {
66
"name": "Amazon Web Services",

plugins/databases-on-aws/skills/dsql/SKILL.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
---
22
name: dsql
3-
description: "Build with Aurora DSQL — manage schemas, execute queries, handle migrations, diagnose query plans, load data, and develop applications with a serverless, distributed SQL database. Covers IAM auth, multi-tenant patterns, MySQL-to-DSQL and PostgreSQL-to-DSQL schema conversion, FK replacement code generation, OCC retry patterns, ORM migration (Django/Hibernate/Rails), DDL operations, query plan explainability, SQL compatibility validation, and bulk data loading. Triggers on phrases like: DSQL, Aurora DSQL, distributed SQL database, serverless PostgreSQL-compatible database, migrate to DSQL, DSQL query plan, DSQL EXPLAIN ANALYZE, DSQL ENUM, DSQL foreign key, DSQL OCC retry, DSQL multi-region, DSQL JSONB, DSQL GIN index, load into DSQL, load CSV into DSQL, bulk load DSQL, aurora-dsql-loader."
3+
description: "Build with Aurora DSQL — manage schemas, execute queries, handle migrations, diagnose query plans, load data, and develop applications with a serverless, distributed SQL database. Covers IAM auth, multi-tenant patterns, MySQL-to-DSQL and PostgreSQL-to-DSQL schema conversion, FK replacement code generation, OCC retry patterns, ORM migration (Django/EF Core/Hibernate/Rails), DDL operations, query plan explainability, SQL compatibility validation, and bulk data loading. Triggers on phrases like: DSQL, Aurora DSQL, distributed SQL database, serverless PostgreSQL-compatible database, migrate to DSQL, DSQL query plan, DSQL EXPLAIN ANALYZE, DSQL ENUM, DSQL foreign key, DSQL OCC retry, DSQL multi-region, DSQL JSONB, DSQL GIN index, load into DSQL, load CSV into DSQL, bulk load DSQL, aurora-dsql-loader."
44
license: Apache-2.0
55
metadata:
6-
tags: aws, aurora, dsql, distributed-sql, distributed, distributed-database, database, serverless, serverless-database, postgresql, postgres, sql, schema, migration, multi-tenant, iam-auth, aurora-dsql, mcp, orm, enum, foreign-key, occ-retry, django, hibernate, rails, multi-region, schema-conversion, type-mapping, data-loading
6+
tags: aws, aurora, dsql, distributed-sql, distributed, distributed-database, database, serverless, serverless-database, postgresql, postgres, sql, schema, migration, multi-tenant, iam-auth, aurora-dsql, mcp, orm, enum, foreign-key, occ-retry, django, ef-core, dotnet, csharp, hibernate, rails, multi-region, schema-conversion, type-mapping, data-loading
77
---
88

99
# Amazon Aurora DSQL Skill
@@ -65,9 +65,9 @@ Load these files as needed for detailed guidance:
6565

6666
### ORM Guides:
6767

68-
| Reference | When to Load | Contains |
69-
| ----------------------------------------------------------- | ------------------------- | ---------------------------------------------------------------- |
70-
| [orm-guides/overview.md](references/orm-guides/overview.md) | Migrating any ORM to DSQL | Adapter names, key gotchas for Django/Hibernate/Rails/SQLAlchemy |
68+
| Reference | When to Load | Contains |
69+
| ----------------------------------------------------------- | ------------------------- | ------------------------------------------------------------------------ |
70+
| [orm-guides/overview.md](references/orm-guides/overview.md) | Migrating any ORM to DSQL | Adapter names, key gotchas for Django/EF Core/Hibernate/Rails/SQLAlchemy |
7171

7272
### Data Loading:
7373

@@ -231,7 +231,7 @@ MUST load [query-plan/workflow.md](references/query-plan/workflow.md) at entry
231231

232232
MUST load [pg-migrations/type-mapping.md](references/pg-migrations/type-mapping.md) and [pg-migrations/schema-objects.md](references/pg-migrations/schema-objects.md). Run `dsql_lint(fix=true)` first for mechanical fixes, then apply semantic conversions from the pg-migrations references for unfixable diagnostics and patterns the linter cannot handle. Re-lint the final output before deploying.
233233

234-
### Workflow 11: ORM Migration (Django/Hibernate/Rails)
234+
### Workflow 11: ORM Migration (Django/EF Core/Hibernate/Rails)
235235

236236
Load [orm-guides/overview.md](references/orm-guides/overview.md) for adapter names and framework-specific gotchas.
237237

plugins/databases-on-aws/skills/dsql/references/auth/connectivity-tools.md

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ Part of [DSQL Development Guide](../development-guide.md).
66

77
## Database Connectivity Tools
88

9-
DSQL has many tools for connecting including 10 database drivers, 4, ORM libraries, and 3 specialized adapters
9+
DSQL has many tools for connecting including 12 database drivers, 4 ORM libraries, and 4 specialized adapters
1010
across various languages as listed in the [programming guide](https://docs.aws.amazon.com/aurora-dsql/latest/userguide/aws-sdks.html). PREFER using connectors, drivers, ORM libraries, and adapters.
1111

1212
### Database Drivers
@@ -43,11 +43,12 @@ Standalone libraries that provide object-relational mapping functionality:
4343

4444
Specific extensions that make existing ORMs work with Aurora DSQL:
4545

46-
| Programming Language | ORM/Framework | Repository |
47-
| -------------------- | ------------- | ------------------------------------------------------------------------------------ |
48-
| **Java** | Hibernate | [Aurora DSQL Hibernate Adapter](https://github.com/awslabs/aurora-dsql-hibernate/) |
49-
| **Python** | Django | [Aurora DSQL Django Adapter](https://github.com/awslabs/aurora-dsql-django/) |
50-
| **Python** | SQLAlchemy | [Aurora DSQL SQLAlchemy Adapter](https://github.com/awslabs/aurora-dsql-sqlalchemy/) |
46+
| Programming Language | ORM/Framework | Repository |
47+
| -------------------- | ------------- | --------------------------------------------------------------------------------------------------- |
48+
| **C# (.NET)** | EF Core | [Aurora DSQL EF Core Adapter](https://github.com/awslabs/aurora-dsql-orms/tree/main/dotnet/ef-core) |
49+
| **Java** | Hibernate | [Aurora DSQL Hibernate Adapter](https://github.com/awslabs/aurora-dsql-hibernate/) |
50+
| **Python** | Django | [Aurora DSQL Django Adapter](https://github.com/awslabs/aurora-dsql-django/) |
51+
| **Python** | SQLAlchemy | [Aurora DSQL SQLAlchemy Adapter](https://github.com/awslabs/aurora-dsql-sqlalchemy/) |
5152

5253
---
5354

plugins/databases-on-aws/skills/dsql/references/language.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,19 @@ PREFER using JDBC with the [DSQL JDBC Connector](https://docs.aws.amazon.com/aur
142142
- Wrap JDBC connection, configure max lifetime < 1 hour
143143
- See [aurora-dsql-samples/java/pgjdbc_hikaricp](https://github.com/aws-samples/aurora-dsql-samples/tree/main/java/pgjdbc_hikaricp)
144144

145+
### C# / .NET
146+
147+
PREFER using the [Amazon.AuroraDsql.Npgsql](https://github.com/awslabs/aurora-dsql-orms/tree/main/dotnet) connector for automatic IAM auth:
148+
149+
- Wraps Npgsql with IAM token generation and refresh
150+
- Register via `AddDsqlDataSource(host)`
151+
152+
#### EF Core
153+
154+
- Adapter: [Amazon.AuroraDsql.EntityFrameworkCore](https://github.com/awslabs/aurora-dsql-orms/tree/main/dotnet/ef-core) (requires .NET 8.0+, EF Core 9.0.7+, `Amazon.AuroraDsql.Npgsql` 1.1.0+)
155+
- Configure with `options.UseDsql(sp)` in `AddDbContext`
156+
- Use `Guid` keys (store-generated `gen_random_uuid()`) and `DsqlExecutionStrategy` for OCC retry — see [orm-guides/overview.md](orm-guides/overview.md) for framework gotchas
157+
145158
### Rust
146159

147160
**SQLx** (async)

plugins/databases-on-aws/skills/dsql/references/onboarding.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -366,7 +366,7 @@ Let them know you're ready to help with more:
366366
2. **Distributed:** Active-active writes across multiple regions
367367
3. **Strong Consistency:** Immediate read-your-writes across all regions
368368
4. **IAM Authentication:** No password management, automatic token rotation
369-
5. **PostgreSQL Compatible:** Supports 12 [Database Drivers](./auth/connectivity-tools.md#database-drivers), 4 [ORMs](./auth/connectivity-tools.md#object-relational-mapping-orm-libraries), and 3 [Adapters/Dialects](./auth/connectivity-tools.md#aurora-dsql-adapters-and-dialects) as listed.
369+
5. **PostgreSQL Compatible:** Supports 12 [Database Drivers](./auth/connectivity-tools.md#database-drivers), 4 [ORMs](./auth/connectivity-tools.md#object-relational-mapping-orm-libraries), and 4 [Adapters/Dialects](./auth/connectivity-tools.md#aurora-dsql-adapters-and-dialects) as listed.
370370

371371
**For detailed patterns, see [`./development-guide.md`](./development-guide.md)**
372372

plugins/databases-on-aws/skills/dsql/references/orm-guides/overview.md

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,13 @@ names and configuration not available in general documentation.
55

66
## Adapters
77

8-
| Framework | Adapter | Install |
9-
| ---------- | ---------------------------------- | ------------------------------------------------------------ |
10-
| Django | `aurora_dsql_django` | `pip install aurora-dsql-django boto3` |
11-
| Hibernate | `aurora-dsql-hibernate-dialect` | `software.amazon.dsql:aurora-dsql-hibernate-dialect` (Maven) |
12-
| Rails | Standard `pg` gem + `aws-sdk-dsql` | `gem 'pg'` + `gem 'aws-sdk-dsql'` |
13-
| SQLAlchemy | `aurora_dsql_sqlalchemy` | `pip install aurora-dsql-sqlalchemy boto3` |
8+
| Framework | Adapter | Install |
9+
| ---------- | --------------------------------------- | ------------------------------------------------------------ |
10+
| Django | `aurora_dsql_django` | `pip install aurora-dsql-django boto3` |
11+
| EF Core | `Amazon.AuroraDsql.EntityFrameworkCore` | `dotnet add package Amazon.AuroraDsql.EntityFrameworkCore` |
12+
| Hibernate | `aurora-dsql-hibernate-dialect` | `software.amazon.dsql:aurora-dsql-hibernate-dialect` (Maven) |
13+
| Rails | Standard `pg` gem + `aws-sdk-dsql` | `gem 'pg'` + `gem 'aws-sdk-dsql'` |
14+
| SQLAlchemy | `aurora_dsql_sqlalchemy` | `pip install aurora-dsql-sqlalchemy boto3` |
1415

1516
## Key Gotchas Per Framework
1617

@@ -25,6 +26,20 @@ names and configuration not available in general documentation.
2526
| AutoField | Replace with `UUIDField(primary_key=True, default=uuid.uuid4)` |
2627
| ForeignKey | Add `db_constraint=False` |
2728

29+
### EF Core (.NET)
30+
31+
Requires .NET 8.0+, EF Core 9.0.7+, and `Amazon.AuroraDsql.Npgsql` 1.1.0+.
32+
33+
| Issue | Fix |
34+
| -------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
35+
| Setup | `AddDsqlDataSource(host)` then `UseDsql(sp)` in `AddDbContext` (IAM auth via `Amazon.AuroraDsql.Npgsql`) |
36+
| PKs | `Guid` keys with a store-generated `gen_random_uuid()` default — leave `Id` unset on insert |
37+
| Auto-increment | `long` keys via `dsql.EnableIdentityColumns()``cacheSize: 1` for near-strict ordering, larger (default ≥ 65536) for throughput |
38+
| OCC retry | `DsqlExecutionStrategy` auto-retries `SaveChangesAsync` in implicit transactions. Inside an explicit transaction it does NOT retry — use `ExecuteInTransactionAsync` and call `ChangeTracker.Clear()` first so retries don't replay stale entities |
39+
| FK constraints | Not enforced — navigations/`Include`/joins work, but enforce referential integrity in the application layer |
40+
| Isolation | Requested isolation levels are ignored; `SET TRANSACTION ISOLATION LEVEL`, `SAVEPOINT`, and `LOCK TABLE` are filtered at the ADO.NET layer |
41+
| Migrations | dsql-lint rewrites EF Core DDL for DSQL (e.g. `CREATE INDEX``CREATE INDEX ASYNC`) and makes it idempotent so failed migrations re-run safely |
42+
2843
### Hibernate
2944

3045
| Issue | Fix |

tools/evals/databases-on-aws/dsql/evals.json

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,31 @@
145145
"Recommends adding --header to the loader invocation"
146146
],
147147
"llm_judge": true
148+
},
149+
{
150+
"id": 13,
151+
"prompt": "I'm building a new .NET web API with Entity Framework Core and want to use Aurora DSQL as the database. Help me get the data layer set up correctly.",
152+
"expected_output": "Recommends the Amazon.AuroraDsql.EntityFrameworkCore adapter with AddDsqlDataSource/UseDsql, and guides toward DSQL-friendly patterns: Guid keys with gen_random_uuid(), application-layer referential integrity, and DsqlExecutionStrategy for OCC retry.",
153+
"files": [],
154+
"expectations": [
155+
"Recommends the Amazon.AuroraDsql.EntityFrameworkCore adapter and AddDsqlDataSource/UseDsql setup",
156+
"Recommends Guid primary keys with a gen_random_uuid() default (or EnableIdentityColumns for long keys)",
157+
"Recommends enforcing referential integrity in the application layer",
158+
"Recommends DsqlExecutionStrategy for OCC retry to handle concurrency conflicts"
159+
],
160+
"llm_judge": true
161+
},
162+
{
163+
"id": 14,
164+
"prompt": "Can I use Aurora DSQL with a C# / .NET application? What's the recommended setup?",
165+
"expected_output": "Confirms .NET support, recommends the Amazon.AuroraDsql.Npgsql connector for IAM auth and the Amazon.AuroraDsql.EntityFrameworkCore adapter for EF Core, and notes the .NET 8.0+/EF Core 9.0.7+ requirements.",
166+
"files": [],
167+
"expectations": [
168+
"Confirms Aurora DSQL works with .NET / C#",
169+
"Recommends the Amazon.AuroraDsql.Npgsql connector for automatic IAM authentication",
170+
"Recommends the Amazon.AuroraDsql.EntityFrameworkCore adapter for EF Core users"
171+
],
172+
"llm_judge": true
148173
}
149174
]
150175
}

tools/evals/databases-on-aws/dsql/trigger_evals.json

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,18 @@
6363
"query": "bulk load parquet data from S3 into DSQL — about 200 million rows across 50 files",
6464
"should_trigger": true
6565
},
66+
{
67+
"query": "I'm migrating a .NET app with Entity Framework Core over to Aurora DSQL",
68+
"should_trigger": true
69+
},
70+
{
71+
"query": "I'm building a .NET app with Entity Framework Core and want to use Aurora DSQL as the database",
72+
"should_trigger": true
73+
},
74+
{
75+
"query": "Can I use Aurora DSQL from a C# / .NET application? Looking for the recommended setup",
76+
"should_trigger": true
77+
},
6678
{
6779
"query": "I need to set up an Aurora Serverless v2 PostgreSQL cluster with read replicas for my analytics workload",
6880
"should_trigger": false

0 commit comments

Comments
 (0)