EasyReasy.Database.Mapping.Npgsql
1.1.1
dotnet add package EasyReasy.Database.Mapping.Npgsql --version 1.1.1
NuGet\Install-Package EasyReasy.Database.Mapping.Npgsql -Version 1.1.1
<PackageReference Include="EasyReasy.Database.Mapping.Npgsql" Version="1.1.1" />
<PackageVersion Include="EasyReasy.Database.Mapping.Npgsql" Version="1.1.1" />
<PackageReference Include="EasyReasy.Database.Mapping.Npgsql" />
paket add EasyReasy.Database.Mapping.Npgsql --version 1.1.1
#r "nuget: EasyReasy.Database.Mapping.Npgsql, 1.1.1"
#:package EasyReasy.Database.Mapping.Npgsql@1.1.1
#addin nuget:?package=EasyReasy.Database.Mapping.Npgsql&version=1.1.1
#tool nuget:?package=EasyReasy.Database.Mapping.Npgsql&version=1.1.1
EasyReasy.Database.Mapping.Npgsql
Npgsql-specific enum handler for EasyReasy.Database.Mapping. Automatically sets NpgsqlParameter.DataTypeName on enum parameters, eliminating the need for ::pg_type casts in SQL queries.
Installation
dotnet add package EasyReasy.Database.Mapping.Npgsql
Usage
With the base DbNameEnumHandler<T>, you need explicit casts in your SQL:
// Without this package — requires ::mapping_test_status cast
TypeHandlerRegistry.AddTypeHandler(new DbNameEnumHandler<TestStatus>());
await connection.ExecuteAsync(
"INSERT INTO users (name, status) VALUES (@name, @status::user_status)",
new { name = "Alice", status = UserStatus.Active });
With NpgsqlDbNameEnumHandler<T>, the cast is handled automatically:
// With this package — no cast needed
TypeHandlerRegistry.AddTypeHandler(new NpgsqlDbNameEnumHandler<UserStatus>("user_status"));
await connection.ExecuteAsync(
"INSERT INTO users (name, status) VALUES (@name, @status)",
new { name = "Alice", status = UserStatus.Active });
Recommended: MapDbNameEnum<T>()
When using PostgreSQL enum types, you need two registrations: Npgsql's MapEnum (so Npgsql recognizes the type) and a NpgsqlDbNameEnumHandler (so EasyReasy maps values via [DbName] attributes). The MapDbNameEnum<T>() extension method on NpgsqlDataSourceBuilder does both in one call, reading the type name from a [DbEnum] attribute on the enum:
[DbEnum("user_status")]
public enum UserStatus
{
[DbName("active")]
Active,
[DbName("inactive")]
Inactive
}
// One call registers both MapEnum and NpgsqlDbNameEnumHandler
IDataSourceFactory factory = new NpgsqlDataSourceFactory(builder =>
{
builder.MapDbNameEnum<UserStatus>();
});
This is the recommended approach because:
- The database type name is defined once on the enum, not duplicated across registration calls
- It ensures both
MapEnumand the type handler are always registered together — forgetting either one causes hard-to-debug errors MapEnumis required by Npgsql 10+ for custom enum types;MapDbNameEnumhandles this automatically
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net8.0
- EasyReasy.Database.Mapping (>= 1.1.0)
- Npgsql (>= 10.0.1)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.