Sto sperimentando con PetaPoco per convertire una tabella in POCO.PetaPoco gestisce le enumerazioni?
Nel mio tavolo, ho una colonna denominata TheEnum
. I valori in questa colonna sono stringhe che rappresentano le seguenti enum:
public enum MyEnum
{
Fred,
Wilma
}
PetaPoco soffoca quando tenta di convertire la stringa "Fred" in un valore MyEnum
.
Lo fa nel metodo GetConverter
, nella linea:
Convert.ChangeType(src, dstType, null);
Qui, src
è "Fred" (un string
), ed è dstType
typeof(MyEnum)
.
L'eccezione è un InvalidCastException
, dicendo Invalid cast from 'System.String' to 'MyEnum'
Mi sto perdendo qualcosa? C'è qualcosa che devo registrare per primo?
io ho tutto il problema aggiungendo la seguente nel metodo GetConverter
:
if (dstType.IsEnum && srcType == typeof(string))
{
converter = delegate(object src)
{
return Enum.Parse(dstType, (string)src) ;
} ;
}
Ovviamente, non voglio correre questo delegato ad ogni ferro in quanto sarà rallentare le cose tremendamente. Potrei registrare questo enum e i suoi valori in un dizionario per velocizzare le cose, ma mi sembra che qualcosa del genere sia già nel prodotto.
Quindi, la mia domanda è: devo fare qualcosa di speciale per registrare la mia enumerazione con PetaPoco?
aggiornamento 23 Febbraio 2012
ho submitted a patch qualche tempo fa, ma non è stato tirato in ancora. Se vuoi usarlo, guarda la patch ed entra nel tuo codice, oppure prendi il codice from here.
** Aggiornamento 28 giu 2012 ** la patch esatta non è stata ancora applicata ma è stato aggiunto un codice simile nel [ramo v5] (https://github.com/toptensoftware/PetaPoco/tree/v5). Vedi anche http://www.toptensoftware.com/Articles/137/Long-Time-No-Post-and-PetaPoco-v5 –
Se non è difficile per te, pls invia patch anche a npoco. Ti consiglio di passare a npoco, perché ha uno sviluppo più attivo e ha tutte le funzionalità di PetaPoco e anche di più. – AuthorProxy
** Aggiornamento 9 settembre 2014 ** La risposta @iano è quella corretta per la versione ** 5.0.2 ** più recente. –