2015-02-18 2 views
5

Sono nuovo di Dapper e sto cercando di capire se è in grado di gestire le stringhe del database di mapping su enumerazioni; non succede per me di default.Dapper: conversione di una stringa in un enum

Ad esempio, dire io uso questo SQL

select customer_type from customers 

e questa classe

public class Customer 
{ 
    ... 
    public CustomerType CustomerType { get; set; } 
    ... 
} 

con questo enum

public enum CustomerType 
{ 
    Unknown, 
    SomeCustomerType, 
    ... 
} 

In questo caso finisco sempre con l'enumerazione di default valore (Sconosciuto) piuttosto che una mappatura del valore stringa dal database.

Qualcuno sa come posso ottenere questo?

Modifica: Modifica: So che questo è possibile con un campo numerico perché un numero verrà convertito in enum, ma questo ha lo svantaggio di dover garantire che l'id del database e l'enum siano mantenuti sincronizzati. Sto cercando qualcosa di simile ma con una corda.

+2

grazie, ma ho già visto quella risposta. È davvero solo una soluzione. Preferirei non aver creato una proprietà shadow per ogni proprietà enum che ho. – johnB

+1

Perché non utilizzare semplicemente una colonna numerica nel DB? Mantenerli sincronizzati è facile come dare valori enum ai valori espliciti (anche se è ridondante) per evitare che cambino continuamente. Questo è anche molto meno dispendioso e più facile da controllare per coerenza rispetto a una stringa. – Alejandro

+2

Sto lavorando con un codebase e un database di grandi dimensioni, quindi sarebbe molto lavoro. Ha anche lo svantaggio di fallire silenziosamente se non si sincronizza. – johnB

risposta

0

Se alias il nome della colonna di avere lo stesso nome di vostra proprietà che dovrebbe funzionare anche:

SELECT REPLACE(customer_type, ' ','') As CustomerType FROM customers

È inoltre possibile utilizzare la sostituzione funzione per rimuovere gli spazi bianchi nel caso in cui i valori della CUSTOMER_TYPE campo nel database ha qualsiasi.