当试图使用Npgsql V3.05持久化枚举时,我将收到以下错误消息。
Enum必须通过Connection.RegisterEnumType或RegisterEnumTypeGlobally向Npgsql注册。
我在PostgreSQL中PostgrSQL中创建了一个类型,并使用以下查询对其进行了验证:
select enum_range(null::schedule_link_type);回传
"{finish_to_start,finish_to_finish,start_to_start,start_to_finish}"我在我的VB.NET程序中创建了一个枚举,如(注意,这是在我的ActionRecord类中):
Public Enum ScheduleLinkType
<EnumLabel("finish_to_start")>
FinishToStart
<EnumLabel("finish_to_finish")>
FinishToFinish
<EnumLabel("start_to_finish")>
StartToFinish
<EnumLabel("start_to_start")>
StartToStart
End Enum在运行insert查询之前,我调用以下方法(请注意,我设置了一个断点,并确认在执行insert命令之前确实正在调用该断点):
NpgsqlConnection.RegisterEnumGlobally(Of ActionRecord.ScheduleLinkType)("schedule_link_type")我试图插入的字段的参数是(来自Visual调试器监视窗口):
command.Parameters(1) {Npgsql.NpgsqlParameter} Npgsql.NpgsqlParameter
Collection {Npgsql.NpgsqlParameterCollection} Npgsql.NpgsqlParameterCollection
DbType Object {13} System.Data.DbType
Direction Input {1} System.Data.ParameterDirection
EnumType {Name = "ScheduleLinkType" FullName = "VSData.ActionRecord+ScheduleLinkType"} System.Type {System.RuntimeType}
IsNullable False Boolean
NpgsqlDbType Enum {47} NpgsqlTypes.NpgsqlDbType
NpgsqlValue FinishToFinish {1} Object {VSData.ActionRecord.ScheduleLinkType}
ParameterName "link_type" String
Precision (System.Data.Common.DbParameter) 0 Byte
Precision 0 Byte
Scale (System.Data.Common.DbParameter) 0 Byte
Scale 0 Byte
Size 0 Integer
SourceColumn "" String
SourceColumnNullMapping False Boolean
SourceVersion Current {512} System.Data.DataRowVersion
Value FinishToFinish {1} Object {VSData.ActionRecord.ScheduleLinkType}有人知道为什么这不管用吗?
发布于 2016-10-26 07:31:39
由于某种原因,这个问题已经消失了,现在一切正常工作(请注意,自从发布了最初的问题后,我已经将NPGSQL更新为3.1.8,但我没有注意到这个问题是否由于升级或其他更改而消失)。
https://stackoverflow.com/questions/36065960
复制相似问题