Dext Framework vs .NET / EF Core

June 1, 2026 · View on GitHub

Purpose: This document provides a comprehensive, objective comparison between the Dext Framework for Delphi and the equivalent ecosystem of ASP.NET Core + Entity Framework Core for .NET. It is intended to help developers understand what Dext offers, where it has parity, where it goes beyond, and where differences exist due to platform context.

Last Updated: May 2026


How to Read This Document

This comparison is structured into four logical blocks:

BlockMeaning
A — Full ParityDext implements the functional equivalent of the .NET feature
B — Dext ExclusiveFeatures Dext has that .NET does not (or requires expensive 3rd party packages)
C — Partial / Roadmap.NET has this; Dext has it partially or it is planned
D — Context DifferenceFeatures of .NET that do not apply to Delphi by design

Block A — Full Feature Parity

Note

All features listed here are fully implemented in Dext. The naming convention and API surface are intentionally kept close to the .NET counterparts to lower the learning curve for developers migrating from the .NET ecosystem.

A.1 ORM / Data Access

FeatureEF CoreDext EquivalentNotes
DbContext (Unit of Work)DbContextTDbContextFull Unit of Work pattern
Change TrackingAutomatic (Added / Modified / Deleted / Unchanged)Automatic — same 4 statesIdentity Map for instance uniqueness by PK
SaveChangesSaveChanges() / SaveChangesAsync()SaveChanges()Persists all tracked changes in a transaction
Generic RepositoryDbSet<T>DbSet<T>Operations: Add, Update, Remove, Find, Where, Include, ToList
Code-First Migrationsdotnet ef migrations addAutomated Migrations SystemAlso via CLI. Chronological snapshots with table/column rename detection. IDE Expert with wizard planned.
Lazy LoadingProxy-based (UseLazyLoadingProxies)Proxy Objects (transparent interception)Same architecture
Eager LoadingInclude() / ThenInclude()Include() / ThenInclude()Same API surface
Soft DeleteGlobal Query Filters (manual)[SoftDelete] / [DeletedAt] attributesFully declarative. HardDelete, Restore, OnlyDeleted, IgnoreQueryFilters. [DeletedAt] automatically stamps the deletion datetime.
Multi-tenancyManual / EF Query FiltersDext.MultiTenancy3 strategies: Shared DB (TenantId), Schema Isolation, DB per Tenant
Pessimistic LockingNot built-in (raw SQL)FOR UPDATE nativeBuilt-in in the query engine
Inheritance: TPHTable-Per-HierarchyTPH with discriminator attributesPolymorphic hydration automatic
Inheritance: TPTTable-Per-TypePartial support
Value ConvertersHasConversion<T>()TValueConverterRegistry20+ built-in converters (Enum, GUID, TUUID, JSONB, TBytes...)
JSON Column QueriesOwnsOne().ToJson() / JSON_VALUE[JsonColumn] + .Json('path')Cross-DB: PostgreSQL JSONB, MySQL JSON_EXTRACT, SQLite json_extract, SQL Server JSON_VALUE
Stored ProceduresFromSqlRaw() / ExecuteSqlRaw()[StoredProcedure] + [DbParam]Fully declarative via attributes
Specification Pattern3rd party (Ardalis.Specification)Dext.Specificationsbuilt-inWhere, OrderBy, Include, Take, Skip fluent builder
LINQ-like Query ExtensionsNative LINQDext.Collections.ExtensionsUnified expression engine, managed records, and implicit operators. Performance optimized via a thread-safe RTTI metadata cache.
Multi-Database SupportSeparate NuGet packages per provider7 drivers unifiedBuilt directly on FireDAC Phys Driver layer (no database components like TQuery). PostgreSQL, SQL Server, MySQL, SQLite, Oracle, Firebird, InterBase (and easily extensible to all FireDAC physical drivers).
Multi-Mapping (Dapper-style)Not built-in[Nested] attributeRecursive hydration. Fully supports mapping directly to Views and Stored Procedures, not just tables.
Connection PoolingADO.NET poolingFluent Connection Setup + Pooling Auto-DetectionUsePostgreSQL, UseFirebird, etc. with auto pooling
PagingSkip() / Take()Skip() / Take()Same API
AggregatesCount(), Sum(), Max(), Min(), Avg()Count(), Sum(), Max(), Min(), Average()Same API
SQL CacheEF compiled queriesSQL command reuse cacheRepeated queries reuse generated SQL
Bulk OperationsExecuteUpdate() / ExecuteDelete() (EF7+)AddRange / UpdateRange / RemoveRangeNative support for high-performance batch insert, update, and delete in a single batch call.
Object Mapping (AutoMapper)AutoMapper (3rd party)TMapperbuilt-inCreateMap<TSource, TDest>, ForMember, Map<TSource, TDest>, collection mapping

A.2 Web Framework / ASP.NET Core Equivalent

FeatureASP.NET CoreDext EquivalentNotes
Minimal APIsapp.MapGet(...) / app.MapPost(...)app.MapGet(...) / app.MapPost(...)Same fluent API
Controller-based APIs[ApiController] + ControllerBase[ApiController] + attribute routingSame pattern
Middleware Pipelineapp.Use(...) — Chain of Responsibilityapp.Use(...) — same architectureFunctional (delegates) and class-based with DI injection
Model Binding[FromBody], [FromQuery], [FromRoute], [FromHeader], [FromServices]Same attributesZero-allocation via TByteSpan (direct UTF-8 deserialization)
API VersioningAsp.Versioning (NuGet)Built-in — 4 readersTHeaderApiVersionReader, TQueryStringApiVersionReader, TPathApiVersionReader, TCompositeApiVersionReader
Rate LimitingMicrosoft.AspNetCore.RateLimitingBuilt-in — 4 algorithmsFixed Window, Sliding Window, Token Bucket, Concurrency Limiter
CORSUseCors()CORS middleware — built-in
Output CachingIOutputCacheIn-Memory (Redis Client planned)Redis client is 80% complete and built natively in Dext for maximum performance
Health ChecksIHealthCheckHealth Checks — built-inBasic built-in implementation; database and external service integrations on the roadmap
ProblemDetails (RFC 9457)Built-in .NET 8+Built-inException handling middleware produces RFC 9457 compliant responses
OpenAPI / SwaggerMicrosoft.AspNetCore.OpenApiBuilt-in — automatic generationRegistered endpoints auto-appear in Swagger
SSE (Server-Sent Events)IServerSentEventsSSE native
SignalR Equivalent (Hubs)SignalRSSE-based Messaging (SignalR planned)Currently basic SSE broadcast. Full bi-directional Hub interfaces are ready; implementation is planned post-native IOCP/EPOLL engine (avoiding LGPL-3.0 dependencies like Delphi-Cross-Socket).
Background ServicesIHostedService / BackgroundServiceIHostedService + TBackgroundServiceExecute(ICancellationToken)
Application LifetimeIHostApplicationLifetimeIHostApplicationLifetimeApplicationStarted, ApplicationStopping, ApplicationStopped
Template EngineRazorDext Template EngineAST-based, zero-dependency, layout inheritance, macros, filters
Template Engine AltRazor PagesWeb Stencils (Delphi 12.2+)Native Delphi alternative
Multipart / File UploadIFormFileIFormFileSame abstraction
GZip CompressionUseResponseCompressionBuilt-in middlewareHigh-performance GZip middleware
Developer Exception PageUseDeveloperExceptionPage()DeveloperExceptionPage middleware

A.3 Core Framework

Feature.NETDext EquivalentNotes
Dependency InjectionMicrosoft.Extensions.DITDextServicesAddSingleton, AddTransient, AddScoped, AddSingletonFactory
DI LifecyclesSingleton / Transient / ScopedSingleton / Transient / ScopedCreateScope for isolated child provider
Auto-Collections (DI)IEnumerable<T> injectionIList<T>, IEnumerable<T>, IDictionary<K,V>Resolved automatically
DI Attributes[FromServices][Inject], [ServiceConstructor]Field/property/constructor injection
Configuration SystemIConfiguration / appsettings.jsonTDextConfigurationJSON, YAML, ENV, CLI args, InMemory — same multi-provider design
Options PatternIOptions<T>, IOptionsSnapshot<T>, IOptionsMonitor<T>IOptions<T>, IOptionsSnapshot<T>, IOptionsMonitor<T>Same interfaces
Hot-Reload ConfigurationIChangeTokenIChangeToken + OnReload callback
LoggingILogger<T> / ILoggerFactoryILoggerFactory / ILoggerTrace, Debug, Information, Warning, Error, Critical
Async / AwaitTask<T> / async/awaitTAsyncTask + Work-Stealing Scheduler
Cancellation TokenCancellationTokenICancellationTokenWaitForCancellation, IsCancellationRequested
NullableNullable<T> / T?Nullable<T>HasValue, Value, GetValueOrDefault, implicit operators
LazyLazy<T>Lazy<T>Thread-safe double-checked locking; factory-based and pre-computed
Span / ReadOnlySpanSpan<T> / ReadOnlySpan<T>TSpan<T> / TReadOnlySpan<T>Zero-allocation; bounds-checked
Object MappingAutoMapper (3rd party)TMapper built-in
JSON SerializationSystem.Text.Json / NewtonsoftTDextJson + Low-level UTF-8 streamingPluggable drivers. Includes zero-allocation binary JSON reader/writer using TSpan directly on raw bytes without heap allocations.
Frozen CollectionsFrozenDictionary<K,V> (.NET 8+)TFrozenDictionary<K,V> / TFrozenSet<T>Lock-Free reads; immutable after construction
Channels (Go-inspired)System.Threading.ChannelsTChannel<T>Bounded (backpressure) + Unbounded; ChannelReader/ChannelWriter
Event Bus / MediatRMediatR (3rd party)Dext.Eventsbuilt-inBehaviors pipeline (logging, timing, exception); scoped/singleton bus
Defer Patternusing / IDisposableIDeferred / TDeferredActionGo-inspired; action executed on scope exit

A.4 Testing

Feature.NETDext EquivalentNotes
Test FrameworkxUnit / NUnit / MSTest (3rd party)Dext.Testingbuilt-in
Attribute-Based Tests[Fact], [Theory], [Test][Fact], [Test], [Fixture], [TestClass]
Data-Driven Tests[InlineData], [MemberData][TestCase], [TestCaseSource], [Values], [Range], [Random]
Combinatorial TestsParameterized (manual)[Combinatorial]All parameter combinations auto-generated
Lifecycle Hooks[SetUp], [TearDown], [OneTimeSetUp][Setup], [TearDown], [BeforeAll], [AfterAll], [AssemblyInitialize]
Fluent AssertionsFluentAssertions (3rd party)Dext.Assertionsbuilt-inShould(Value) pattern; structural comparison
Soft AssertsFluentAssertions (3rd party)Assert.Multiple(...) — built-inCollect multiple failures before failing
Snapshot TestingVerify (3rd party)Built-inDisk-based baseline, structural JSON compare, update mode
MockingMoq / NSubstitute (3rd party)Dext.Mocksbuilt-inMock<T>.Setup.Returns(Val), matchers, verification
Auto-MockingAutoFixture + Moq (3rd party)TAutoMockerbuilt-inAutomated mock injection into DI container
CI/CD Reports3rd party librariesBuilt-inJUnit XML, xUnit XML, TRX (Azure DevOps), HTML (Dark Theme), JSON, SonarQube

Block B — Dext Exclusive Features

Important

The features in this block exist in Dext but have no direct equivalent in the .NET ecosystem (or require expensive 3rd-party solutions that are not officially supported). These are the primary technical differentiators.

FeatureDext.NET / EF Core StatusImpact
Database as API[DataApi] attribute + app.MapDataApis — generates full CRUD REST API at runtime in 1 lineNo equivalent. Requires Scaffold + Controllers + Repository + Service layer manually🔴 Major — eliminates days of boilerplate for standard CRUD operations
Smart Properties / Prop<T>Generic record with dual mode: stores value OR generates AST via operator overloading. Type-safe queries without magic strings. Same AST used by ORM and URL filter engineLINQ is native to C#; but AST is not portable between ORM and other subsystems🔴 Major — eliminates nameof() and expression tree boilerplate
EntityDataSet (ORM ↔ VCL/FMX Bridge)Connects TList<T> (both Smart Properties and POCO collections) to DBGrid/FastReport. Live data preview in the IDE in design-time without compilingNo equivalent. Windows Forms DataAdapter is not POCO-based; no IDE preview from ORM🔴 Major (Delphi-specific advantage)
SIMD-Accelerated CollectionsTRawDictionary with Open Addressing + Linear Probing. AVX2/SSE2 vectorized lookups. 6.6x faster than standard RTL dictionaryBCL collections use similar techniques, but developers cannot control or tune at this level🟡 High — critical path performance
In-Process TExpressionEvaluatorEvaluates the same ORM AST against in-memory objects and dictionaries. Used by EntityDataSet.Filter and standaloneEF Core does not expose an in-memory evaluator for the same expression tree used by SQL🟡 High — enables truly unified query logic
TStringExpressionParserConverts URL QueryString (?age_gt=18) directly into IExpression AST nodes with automatic type inferenceNo equivalent. DRF (Python) does this; ASP.NET requires custom filter parsing🟡 High — powers Database as API URL filter system
MCP Server NativeZero-dependency MCP 2025-03-26 implementation. [MCPTool], [MCPParam], [MCPResource], [MCPPrompt] RTTI attributes. HTTP Streamable, SSE, Stdio transportsNo official .NET MCP server implementation (ecosystem still nascent in 2026)🟡 High — AI-native framework capability
Flyweight / Streaming SSRTStreamingViewIterator<T> — renders 10,000+ records with O(1) memory during template @foreachIAsyncEnumerable<T> + streaming via yield return exists but requires manual plumbing🟡 High — critical for large-volume SSR without ToList
HTMX Auto-DetectionFramework automatically detects HX-Request headers and suppresses global layout on compatible endpointsASP.NET does not have native HTMX integration; requires manual header inspection🟢 Medium
Binary Code FoldingTRawList<T> — typed generics are thin wrappers over a raw memory core. Up to 60% reduction in compile timesNot needed in C# (no Generic Bloom problem in the CLR)🟢 Medium (Delphi-specific)
Live IDE Scaffolding ExpertDext Design-Time Expert parses .pas units and creates TFields dynamically without compiling. Live table selection with real-time SQL previewEF Core Scaffold requires compilation and migration; no comparable IDE integration🟢 Medium (Delphi-specific advantage)
AI Skills (Native)Modular .md skill files teaching AI assistants (Cursor, Antigravity, Copilot, Claude) to generate idiomatic Dext codeElevates developer efficiency directly inside modern AI editors🟢 Medium — DX multiplier
Visual Telemetry Dashboard (Built-in)Embedded Dashboard (WIP) with Gantt span tree, RED metrics graphs (RPS, QPS, latency, errors), SQL profiler, HTTP profilerRequires Grafana + Prometheus + Jaeger + OpenTelemetry collector as separate infrastructure🔴 Major for teams without DevOps infrastructure (significant updates coming soon)
UUID v7 NativeTUUID.NewV7 — time-ordered, RFC 9562 compliant. Automatic endianness swap for PostgreSQL uuidGuid.NewGuid() generates v4; v7 requires NuGet package (UUIDNext, etc.)🟢 Medium
FireDAC ConnectionDef SupportUseConnectionDef('MyConn') resolves dialect, driver, and pooling from FDManager automaticallyAllows zero-config deployment by directly reading global IDE/Server FD connection profiles.🟢 Medium (Delphi-specific advantage)
.http File Runner (Built-in)Native parser for standard .http files. Same file documents the API, is tested in Dashboard, and executed by RestClientVS Code/.http files are a tooling convention; ASP.NET does not have a built-in runner🟢 Medium — DX advantage

Block C — Partial in Dext / Roadmap Items

Note

These are features where .NET has a more complete or different implementation. Dext either has a partial equivalent or the feature is planned.

Feature.NET StatusDext StatusNotes
OpenTelemetry ActivitySourceFully integrated (ActivitySource, Meter, W3C Trace Context)Partial — TDiagnosticSource + CorrelationId trackingRoadmap: full OTel exporters (OTLP, Console)
HybridCache (L1 + L2 unified).NET 9+ — unified L1 (in-memory) + L2 (Redis/SQL), stampede protection, tag-based invalidationPartial — In-Memory and Redis available separatelyRoadmap: unified HybridCache API
DbContext PoolingAddDbContextPool<T> — high-traffic context reuse poolNot yet implementedRoadmap: TPooledDbContextFactory
Named Query Filters (multiple)EF Core 10 — multiple named filters per entity, selectively enabled/disabledPartial — single global filter per entityRoadmap: named filter support
ISaveChangesInterceptor (formal)EF Core Interceptors — decoupled pipelinePartial — auditing is done inside DbContext overrideRoadmap: formal interceptor interfaces
IDbCommandInterceptor (formal)SQL command interception for logging, correlation IDsPartial — TDiagnosticSource captures SQLRoadmap: formal command interceptor
Vector Search / Hybrid SearchEF Core 10 + SQL Server 2025Not implementedNiche requirement — will track adoption

Block D — Context Differences (Not Applicable to Delphi)

Note

These are features of the .NET ecosystem that do not apply to the Dext Framework by design. The difference is architectural and platform-specific, not a gap.

Feature (.NET)Why It Doesn't Apply to Dext
Blazor / WebAssemblyDelphi compiles to native binaries. UI for desktop apps uses FMX (multi-platform) or VCL (Windows). No browser runtime needed
JavaScript InteropDelphi has no JS runtime. Browser integration, when needed, is via standard REST APIs
Native AOT compilationDelphi has always compiled ahead-of-time to native machine code. This is the default, not a new feature. No warm-up time, no JIT, no runtime
Passkey / Biometric Identity UIBrowser-level WebAuthn API — handled at the reverse proxy or front-end layer
ANCM / IIS ModuleDext uses the WebBroker Adapter for native IIS/ISAPI/CGI integration — already a first-class citizen
gRPC (proto-buf generated code)Delphi has no native gRPC compiler; but gRPC & Protobuf are on Wave 3 of Dext's Roadmap (S02) as a high-performance native IOCP/EPOLL engine with Code-First gRPC mapping for Delphi Interfaces (S14).
Compiled Models (EF Core)Delphi compiles the entire model ahead-of-time. There is no warm-up cost for ORM metadata at runtime
Source Generator ValidationDelphi does not have Source Generators as a language feature. Dext uses RTTI-based validation ([Required], [Range], etc.) which achieves the same result
HSTS MiddlewareTypically managed by the reverse proxy (Nginx, Caddy, Traefik). Dext focuses on app-layer concerns
Static Assets Pipeline (MapStaticAssets)Relevant for web apps serving front-end bundles. Delphi apps typically serve through a CDN or reverse proxy

Summary Statistics

CategoryCount
Full Parity Features (Block A)60+
Dext-Exclusive Features (Block B)17
Roadmap Items (Block C)7
Context Differences — Not Applicable (Block D)10

Engineering & High-Performance Foundations

To understand how these functional parity points and exclusive features are implemented at a lower level, refer to our comprehensive architectural guide. It covers compiler-level optimizations, memory footprints, and low-level performance benchmarks:

  • 👉 Dext Framework Ecosystem Overview: Deep dive into the Zero-Allocation Web Pipeline, Binary Code Folding (Generic Bloom Cure), and SIMD-Accelerated Collections.

This document is a reference table — use it to look up specific features or run precise comparisons.

I want to…Go to…
Understand why Dext was built and get the big pictureDext vs .NET — Architecture Narrative
Deep-dive into the ORM with code examples (Delphi vs C#)Dext ORM — Complete Capabilities Reference
Understand Apache 2.0 licensing and enterprise complianceOpen Source Licensing for Enterprise
Read the full Dext ecosystem architectureDext Ecosystem Overview

Dext Framework — Feature Comparison Reference | May 2026