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