EntityFrameworkCore.OpenEdge
Entity Framework Core provider for Progress OpenEdge
Install / Use
/learn @alexwiese/EntityFrameworkCore.OpenEdgeREADME
EntityFrameworkCore.OpenEdge
EntityFrameworkCore.OpenEdge is an Entity Framework Core 9 provider that lets you target Progress OpenEdge databases via ODBC.
⚠️ Status: This library is under active development. While it is already used in production scenarios, you may still encounter bugs or missing edge-cases. Please open an issue if you run into problems.
Quick Start
Install
dotnet add package EntityFrameworkCore.OpenEdge --version 9.0.7
DSN-less connection
optionsBuilder.UseOpenEdge(
"Driver=Progress OpenEdge 11.7 Driver;" +
"HOST=localhost;PORT=10000;UID=<user>;PWD=<password>;DIL=1;Database=<db>");
Using a DSN
optionsBuilder.UseOpenEdge("dsn=MyDb;password=mypassword");
Custom schema (defaults to "pub")
optionsBuilder.UseOpenEdge(
connectionString: "dsn=MyDb;password=mypassword",
defaultSchema: "myschema");
Reverse-engineer an existing database
Scaffold-DbContext "dsn=MyDb;password=mypassword" EntityFrameworkCore.OpenEdge -OutputDir Models
Feature Matrix (EF Core 9)
| Area | Status | Notes |
|--------------------------|:------:|---------------------------------------------------------------------------|
| Queries | ✅ | SELECT, WHERE, ORDER BY, GROUP BY, paging (Skip/Take), aggregates |
| Joins / Include | ✅ | INNER JOIN, LEFT JOIN, filtered Includes |
| String operations | ✅ | Contains, StartsWith, EndsWith, Length |
| CRUD | ✅ | INSERT, UPDATE, DELETE – one command per operation (OpenEdge limitation) |
| Scaffolding | ✅ | Scaffold-DbContext |
| Nested queries | ✅ | Skip/Take inside sub-queries (new in 9.0.4) |
| DateTime literal support | ✅ | { ts 'yyyy-MM-dd HH:mm:ss' } formatting |
| Date/Time operations | ✅ | DateOnly properties (Year, Month, Day, DayOfYear, DayOfWeek); methods (FromDateTime, AddDays, AddMonths, AddYears) |
OpenEdge Gotchas
- Primary keys – OpenEdge doesn’t enforce uniqueness. Use
rowidor define composite keys - No batching /
RETURNING– each modification executes individually; concurrency detection is limited.
See the OpenEdge SQL Reference for database specifics.
Legacy 1.x Line (netstandard2.0 / EF Core 2.1)
The original 1.x versions target netstandard 2.0 and EF Core 2.1.
They remain on NuGet for applications that cannot yet migrate to .NET 8/9.
| Package | Framework | EF Core | Install |
|---------|-----------|---------|---------|
| 1.0.11 (latest stable) | netstandard2.0 | 2.1.x | dotnet add package EntityFrameworkCore.OpenEdge --version 1.0.11 |
| 1.0.12-rc3 | netstandard2.0 | 2.1.x | dotnet add package EntityFrameworkCore.OpenEdge --version 1.0.12-rc3 |
The 1.x branch is feature-frozen. New development happens in the 9.x line.
Contributing & Development
We welcome pull requests — especially back-ports to older EF Core branches and additional translator implementations.
- Testing requirements: EF Core providers are expected to pass the EF Core provider specification tests. Our current test harness is minimal and may not cover all cases. Contributions that add missing tests (or implement the snadard testing flow for database providers) are highly appreciated.
- Bug reports: Please include a runnable repro or failing test where possible.
For a deeper dive into the architecture (query / update pipelines, type mapping, etc.) browse the source under src/EFCore.OpenEdge.
License
Apache-2.0 – see LICENSE.
Related Skills
oracle
354.3kBest practices for using the oracle CLI (prompt + file bundling, engines, sessions, and file attachment patterns).
prose
354.3kOpenProse VM skill pack. Activate on any `prose` command, .prose files, or OpenProse mentions; orchestrates multi-agent workflows.
Command Development
112.3kThis skill should be used when the user asks to "create a slash command", "add a command", "write a custom command", "define command arguments", "use command frontmatter", "organize commands", "create command with file references", "interactive command", "use AskUserQuestion in command", or needs guidance on slash command structure, YAML frontmatter fields, dynamic arguments, bash execution in commands, user interaction patterns, or command development best practices for Claude Code.
Plugin Structure
112.3kThis skill should be used when the user asks to "create a plugin", "scaffold a plugin", "understand plugin structure", "organize plugin components", "set up plugin.json", "use ${CLAUDE_PLUGIN_ROOT}", "add commands/agents/skills/hooks", "configure auto-discovery", or needs guidance on plugin directory layout, manifest configuration, component organization, file naming conventions, or Claude Code plugin architecture best practices.
