2015-02-18 19 views
5

Ich bin neu bei Dapper und ich versuche herauszufinden, ob es Mapping-Datenbank-Strings auf Enums behandeln kann; das passiert mir standardmäßig nicht.Dapper: Konvertieren einer Zeichenfolge in ein Enum

Zum Beispiel, sagen, dass ich dieses

SQL verwenden
select customer_type from customers 

und diese Klasse

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

mit diesem Enum

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

In diesem Fall habe ich immer am Ende mit dem Standard-Enumeration Wert (Unbekannt) anstelle einer Zuordnung des Zeichenfolgenwerts aus der Datenbank.

Wer weiß, wie ich das erreichen kann?

Edit: Ich weiß, dass dies mit einem Nummernfeld möglich ist, weil eine Zahl in eine Enum konvertieren wird, aber das hat den Nachteil, sicherzustellen, dass die Datenbank-ID und enum synchron gehalten werden. Ich suche nach etwas ähnlichem aber mit Schnur.

+2

danke, aber ich sah diese Antwort bereits. Es ist wirklich nur eine Arbeit. Ich hätte lieber keine Schatteneigenschaft für jede Enum-Eigenschaft, die ich habe, erstellt. – johnB

+1

Warum nicht einfach eine numerische Spalte in der Datenbank verwenden? Es ist so einfach, sie synchron zu halten, als den enum-Werten explizite Werte zu geben (auch wenn sie redundant sind), um zu verhindern, dass sie sich jemals ändern. Das ist auch viel weniger verschwenderisch und leichter auf Konsistenz zu prüfen als eine Saite. – Alejandro

+2

Ich arbeite mit einer großen Codebase und Datenbank, das wäre eine Menge Arbeit. Es hat auch den Nachteil, dass es im Hintergrund versagt, wenn sie nicht mehr synchron sind. – johnB

Antwort

0

Wenn Sie den Spaltennamen alias denselben Namen wie Ihr Eigentum zu haben, die auch funktionieren sollte:

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

Sie können auch die ersetzen verwenden Funktion Leerräume bei der CUSTOMER_TYPE die Werte entfernen Feld in der Datenbank hat irgendwelche.

Verwandte Themen