Я экспериментирую с PetaPoco, чтобы преобразовать таблицу в POCOs.
В моей таблице у меня есть столбец с именем TheEnum
. Значения в этом столбце представляют собой строки, которые представляют следующее перечисление:
public enum MyEnum
{
Fred,
Wilma
}
PetaPoco задыхается, когда пытается преобразовать строку "Fred" в значение MyEnum
.
Он делает это в методе GetConverter
, в строке:
Convert.ChangeType( src, dstType, null );
Здесь src
- "Fred" (a 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?
Обновление 23 февраля 2012
I представил патч некоторое время назад, но он еще не был взят. Если вы хотите использовать его, посмотрите на патч и объединитесь в свой собственный код или получите только код отсюда.