This document provides an overview of the FirebirdSQL .NET Provider repository, which delivers ADO.NET and Entity Framework connectivity for Firebird databases. The repository produces three primary NuGet packages that enable .NET applications to interact with Firebird database servers versions 3.0, 4.0, and 5.0.
This page covers the repository organization, package structure, build system, and testing infrastructure at a high level. For detailed information about specific components:
Sources: README.md1-46 src/Directory.Build.props1-37 src/Versions.props1-18
The repository delivers three independently versioned NuGet packages:
| Package | Version | Target Frameworks | Primary Purpose |
|---|---|---|---|
FirebirdSql.Data.FirebirdClient | 11.0.0-alpha1 | net8.0, net9.0, net10.0 | ADO.NET data provider |
FirebirdSql.EntityFrameworkCore.Firebird | 13.0.0 | net10.0 | Entity Framework Core provider |
EntityFramework.Firebird | 10.1.0 | net48, netstandard2.1 | Entity Framework 6 provider |
The ADO.NET provider (FirebirdSql.Data.FirebirdClient) serves as the foundation, with both Entity Framework providers depending on it. The EF Core provider targets the latest .NET version, while the EF6 provider maintains compatibility with .NET Framework 4.8 and .NET Standard 2.1.
Sources: README.md16-22 src/Versions.props1-18 src/FirebirdSql.Data.FirebirdClient/FirebirdSql.Data.FirebirdClient.csproj1-57 src/FirebirdSql.EntityFrameworkCore.Firebird/FirebirdSql.EntityFrameworkCore.Firebird.csproj1-41 src/EntityFramework.Firebird/EntityFramework.Firebird.csproj1-58
The repository follows a centralized build configuration model where Directory.Build.props imports Versions.props and applies common settings to all projects. The build.ps1 script orchestrates compilation and NuGet package creation, while tests.ps1 manages test execution across multiple Firebird versions and configuration matrices.
Sources: src/Directory.Build.props1-37 src/Versions.props1-18 build.ps11-50 tests.ps11-172
The core ADO.NET provider exposes standard ADO.NET interfaces through Firebird-specific implementations:
The public API follows standard ADO.NET patterns, with FbConnection managing database connections and pooling, FbCommand executing SQL statements, and FbDataReader providing forward-only result set access. The FbBatchCommand class (Firebird 4+) enables efficient batch operations. Service classes handle administrative operations like backup, restore, and database validation.
Sources: README.md3-14 docs/batching.md1-22 docs/decfloat.md1-8 docs/int128.md1-8 docs/time-zones.md1-8
| Firebird Version | Status | Key Features |
|---|---|---|
| 3.0 | Fully Supported | Traditional data types, services API |
| 4.0 | Fully Supported | Batching, DECFLOAT, INT128, time zones, BOOLEAN |
| 5.0 | Fully Supported | All 4.0 features plus performance improvements |
The provider maintains compatibility across three major Firebird versions through conditional feature detection. Firebird 4.0+ introduces several advanced data types that require special handling:
FbDecFloat type for precise decimal floating-point arithmeticSystem.Numerics.BigInteger for 128-bit integer valuesFbZonedDateTime and FbZonedTime typesFbBatchCommand provides batch execution API for improved performanceSources: README.md3-14 docs/batching.md1-22 docs/decfloat.md1-8 docs/int128.md1-8 docs/time-zones.md1-8 .github/workflows/ci.yml15-16
The build process is separated into two PowerShell scripts. The build.ps1 script performs a clean build of all projects and extracts NuGet packages to the out/ directory. Version numbers are sourced from Versions.props and applied via Directory.Build.props.
The tests.ps1 script implements dynamic Firebird provisioning: it downloads the specified Firebird version from the NETProvider-tests-infrastructure GitHub repository, extracts it to a temporary directory, starts the server as a background process using firebird.exe -a, executes the test suite, and performs cleanup. The CI workflow orchestrates 24 parallel test jobs (3 Firebird versions × 8 test suite configurations).
Test projects use NUnit for most test suites (executing as standalone .exe files with --where filters), except for EF Core Functional tests which use xUnit and run via dotnet test.
Sources: build.ps11-50 tests.ps11-172 .github/workflows/ci.yml1-58 include.ps11-7
The provider implements a two-layer exception architecture:
Internal code throws IscException with error codes from IscCodes. The public API translates these to FbException via the FbException.Create() method. If the error code is isc_cancelled, the method returns OperationCanceledException instead, enabling proper cancellation token integration. The FbException class populates an FbErrorCollection with user-friendly error messages.
Sources: src/FirebirdSql.Data.FirebirdClient/FirebirdClient/FbException.cs1-72 src/FirebirdSql.Data.FirebirdClient/Common/IscException.cs1-222
All version numbers are centrally managed in Versions.props:
The Directory.Build.props file imports Versions.props and applies common package metadata to all projects, including company information, repository URLs, licensing, and SourceLink configuration. Each project references these properties in their .csproj files:
FirebirdSql.Data.FirebirdClient.csproj uses $(ProviderVersion)FirebirdSql.EntityFrameworkCore.Firebird.csproj uses $(EFCoreProviderVersion) and references $(EFCoreReferencePackageVersion) for Microsoft.EntityFrameworkCore.RelationalEntityFramework.Firebird.csproj uses $(EF6ProviderVersion) and references $(EF6ReferencePackageVersion) for EntityFrameworkIn Debug configuration, the EF Core provider uses a ProjectReference to the ADO.NET provider; in Release configuration, it uses a PackageReference to ensure proper NuGet dependency chains.
Sources: src/Versions.props1-18 src/Directory.Build.props1-37 src/FirebirdSql.Data.FirebirdClient/FirebirdSql.Data.FirebirdClient.csproj13 src/FirebirdSql.EntityFrameworkCore.Firebird/FirebirdSql.EntityFrameworkCore.Firebird.csproj12-40 src/EntityFramework.Firebird/EntityFramework.Firebird.csproj12-50
The repository maintains strict contribution requirements defined in CONTRIBUTING.md:
The repository enforces these standards through automated CI checks that run 24 test configurations (3 Firebird versions × 8 test suite variations) on every push and pull request.