namespace Models
{
public class OurModel {
public int Id { get; set; }
public OurType Type { get; set; }
}
}
GlobalConfiguration.Setup().UsePostgreSql();
FluentMapper.Entity<OurModel>().Table("schema.ourmodel");
...
await connection.InsertAsync<OurModel, int>(data, cancellationToken: cancellationToken);
PostgreSqlDbHelper.DynamicHandler changes the NpgsqlParameter.NpgsqlDbType to Unknown for all Enum types. That sets the _npgsqlDbType from null to Unknown. _npgsqlDbType is not null as it should and this leads to wrong invocation chain within NpgsqlParameter.ResolveTypeInfo (AdoSerializerHelpers.GetTypeInfoForWriting -> ... -> TypeInfoCache<TPgTypeId>.GetOrAddInfo ...).
I've checked that if I don't set the type to Unknown the code works as expected and correct Oid and type is selected during type resolution.
This change was introduced in fix for #1040, but I'm not sure this is a correct solution and if it is necessary anymore. If it is, I think there should be some check as in RepoDb Compiler.GetPlainTypeToDbParametersCompiledFunction where for enums there is a check if the type IsPostgreSqlUserDefined (maybe the fix should be there?).
Exception Message:
AdoSerializerHelpers.GetTypeInfoForWriting
InvalidCastException
Writing values of 'Models.OurType' is not supported for parameters having DataTypeName 'Unknown'
Bug Description
We have a user defined type in the PostgreSQL db.
In c# code we map the enum using
For writing we use the code like this
PostgreSqlDbHelper.DynamicHandler
changes theNpgsqlParameter.NpgsqlDbType
toUnknown
for allEnum
types. That sets the_npgsqlDbType
fromnull
toUnknown
._npgsqlDbType
is notnull
as it should and this leads to wrong invocation chain withinNpgsqlParameter.ResolveTypeInfo
(AdoSerializerHelpers.GetTypeInfoForWriting -> ... -> TypeInfoCache<TPgTypeId>.GetOrAddInfo ...
). I've checked that if I don't set the type toUnknown
the code works as expected and correctOid
and type is selected during type resolution.This change was introduced in fix for #1040, but I'm not sure this is a correct solution and if it is necessary anymore. If it is, I think there should be some check as in RepoDb
Compiler.GetPlainTypeToDbParametersCompiledFunction
where for enums there is a check if the typeIsPostgreSqlUserDefined
(maybe the fix should be there?).Exception Message:
Library Version:
RepoDb v1.13.1 RepoDb.PostgreSql v1.13.1 Npgsql 8.0.2