Eksperymentuję z PetaPoco, aby przekształcić tabelę w POCO.Czy PetaPoco obsługuje wyliczenia?
W moim stole mam kolumnę o nazwie TheEnum
. Wartości w tej kolumnie są ciągi, które reprezentują następujące wyliczenia:
public enum MyEnum
{
Fred,
Wilma
}
PetaPoco dławi gdy próbuje przekonwertować ciąg „Fred” na wartość MyEnum
.
Czyni to w sposób GetConverter
, w linii:
Convert.ChangeType(src, dstType, null);
Tutaj src
jest "Fred" (a string
) i dstType
jest typeof(MyEnum)
.
Wyjątkiem jest InvalidCastException
mówiąc Invalid cast from 'System.String' to 'MyEnum'
Am I czegoś brakuje? Czy jest coś, co muszę najpierw zarejestrować?
mam sobie z tym problemem poprzez dodanie następujących do metody GetConverter
:
if (dstType.IsEnum && srcType == typeof(string))
{
converter = delegate(object src)
{
return Enum.Parse(dstType, (string)src) ;
} ;
}
Oczywiście, nie chcę, aby uruchomić ten delegata na każdym rzędzie jak będzie to spowolnić ogromnie. Mogłabym zarejestrować to wyliczenie i jego wartości w słowniku, aby przyspieszyć działanie, ale wydaje mi się, że coś podobnego prawdopodobnie już byłoby w produkcie.
Moje pytanie brzmi, czy muszę zrobić coś specjalnego, aby zarejestrować moje wyliczenia z PetaPoco?
Aktualizacja 23 lutego 2012
submitted a patch ja jakiś czas temu, ale nie została jeszcze wciągnięta. Jeśli chcesz go użyć, spójrz na poprawkę i połącz się z własnym kodem lub uzyskaj kod: from here.
** Aktualizacja 28 czerwca 2012 ** dokładna łatka nie została jeszcze zastosowana, ale dodano podobny kod w gałęzi [v5] (https://github.com/toptensoftware/PetaPoco/tree/v5). Zobacz także http://www.toptensoftware.com/Articles/137/Long-Time-No-Post-and-PetaPoco-v5 –
Jeśli nie jest to dla ciebie trudne, pls przesyłaj łatkę również na npoco. Polecam przełączyć na npoco, ponieważ ma bardziej aktywny rozwój i posiada wszystkie funkcje, które ma PetaPoco, a nawet więcej. – AuthorProxy
** Aktualizacja 9 września 2014 ** Odpowiedź @iano jest poprawna dla najnowszej wersji ** 5.0.2 **. –