При попытке сохранить перечисление с помощью Npgsql V3.05 появляется следующее сообщение об ошибке.Ошибка Npgsql Enum
Перечисления должны быть зарегистрированы с помощью Npgsql Connection.RegisterEnumType или RegisterEnumTypeGlobally
Я создал тип в PostgreSQL в PostgrSQL, и проверить его с помощью следующего запроса:
select enum_range(null::schedule_link_type);
который возвращает
"{finish_to_start,finish_to_finish,start_to_start,start_to_finish}"
Я создал enu м в моей программе 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
Я называю следующий метод перед выполнением запроса вставки (обратите внимание, что я поставил точку останова andconfirmed это действительно быть вызвано прежде команда вставки выполнена):
NpgsqlConnection.RegisterEnumGlobally(Of ActionRecord.ScheduleLinkType)("schedule_link_type")
параметр для поля, которое я пытаюсь вставить это (из окна отладчика часов Visual Studio):
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}
Кто-нибудь знает, почему это не работает?
Кажется, что если я зарегистрирую Enum через Connection.RegisterEnumType, он работает, но если я зарегистрирую Enum через NpgsqlConnection.RegisterEnumTypeGlobally, это не сработает. – Casey