Я экспериментирую с PetaPoco, чтобы преобразовать таблицу в POCOs.Поддерживает ли PetaPoco перечисления?
В моей таблице у меня есть столбец с именем TheEnum
. Значения в этом столбце являются строками, которые представляют собой следующее перечисление:
public enum MyEnum
{
Fred,
Wilma
}
PetaPoco задыхается, когда он пытается преобразовать строку «Fred» в значение MyEnum
.
Он делает это в методе GetConverter
, в строке:
Convert.ChangeType(src, dstType, null);
Здесь src
является "Фред" (а string
), и dstType
является typeof(MyEnum)
.
Исключение является InvalidCastException
, говоря Invalid cast from 'System.String' to 'MyEnum'
ли я что-то отсутствует? Нужно ли мне сначала зарегистрироваться?
У меня вокруг проблемы, добавив следующее в метод GetConverter
:
if (dstType.IsEnum && srcType == typeof(string))
{
converter = delegate(object src)
{
return Enum.Parse(dstType, (string)src) ;
} ;
}
Очевидно, что я не хочу, чтобы запустить этот делегат на каждой строке, как это будет замедлить ход событий чрезвычайно. Я мог бы зарегистрировать это перечисление и его значения в словаре, чтобы ускорить процесс, но мне кажется, что что-то вроде этого, вероятно, уже будет в продукте.
Итак, мой вопрос: мне нужно сделать что-нибудь особенное для регистрации моих перечислений с помощью PetaPoco?
Update 23 февраля 2012
submitted a patch Я некоторое время назад, но это не потянули в себе. Если вы хотите использовать его, посмотрите на патч и объединитесь в свой собственный код или получите только код from here.
** Обновление 28 июня 2012 г. ** точный патч по-прежнему не применяется, но аналогичный код был добавлен в ветку [v5] (https://github.com/toptensoftware/PetaPoco/tree/v5). См. Также http://www.toptensoftware.com/Articles/137/Long-Time-No-Post-and-PetaPoco-v5 –
Если вам это не сложно, отправьте патч на npoco. Я рекомендую вам переключиться на npoco, потому что он имеет более активную разработку и имеет все функции, которые есть у PetaPoco, и даже больше. – AuthorProxy
** Обновление 9 сентября 2014 г. ** Ответ @iano является правильным для последней версии ** 5.0.2 **. –