Я экспериментирую с PetaPoco, чтобы преобразовать таблицу в POCO.
В моей таблице у меня есть столбец с именем ] TheEnum
. Значения в этом столбце представляют собой строки, которые представляют следующее перечисление:
public enum MyEnum
{
Fred,
Wilma
}
PetaPoco задыхается, когда пытается преобразовать строку «Fred» в значение MyEnum
.
Это делается в GetConverter
в строке:
Convert.ChangeType( src, dstType, null );
Здесь src
- это «Фред» ( строка
), а dstType
- typeof (MyEnum)
.
Исключением является InvalidCastException
, сообщающее Недопустимое приведение из System.String в MyEnum
Я что-то упустил? Есть ли что-то, что мне нужно сначала зарегистрировать?
Я решил эту проблему, добавив в метод GetConverter
следующее:
if (dstType.IsEnum && srcType == typeof(string))
{
converter = delegate( object src )
{
return Enum.Parse( dstType, (string)src ) ;
} ;
}
Очевидно, я не хочу запускать этот делегат на каждом грести, так как это сильно замедлит работу. Я мог бы зарегистрировать это перечисление и его значения в словаре, чтобы ускорить процесс, но мне кажется, что что-то подобное, вероятно, уже есть в продукте.
Итак, мой вопрос: нужно ли мне делать что-то особенное, чтобы зарегистрировать мои перечисления в PetaPoco?
Обновление от 23 февраля 2012 г.
Я отправил патч некоторое время назад, но он еще не загружен. Если вы хотите его использовать, посмотрите на патч и слейте его в свой собственный код или получите только код отсюда .