2013-12-20 12 views
7

Aufgrund meiner Fehlermeldung:Enum und Flaggen unterstützen in ormlite servicestack

An exception of type 'System.Data.SqlClient.SqlException' occurred in System.Data.dll but was not handled in user code 

Additional information: Conversion failed when converting the nvarchar value 'AB' to data type int. 

Ich habe eine Enum mit einem Wert AB und ich möchte es als ganze Zahl nicht nvarchar Wert speichern. Ich habe eine Enumeration mit Fahnen Attribut so etwas wie: [Flags]

public enum VisibleDayOfWeek : int 
{ 
    None = 0, 
    Monday = 1, 
    Tuesday = 2, 
    Wednesday = 4, 
    Thursday = 8, 
    Friday = 16, 
    Saturday = 32, 
    Sunday = 64 
} 

Ich kann nicht mehr Tage Zeichenfolge in der db speichern, aber ich kann die Summe der Flags Werte speichern, die mehrere Tage darstellen.

Ich möchte keinen Integer-Wrapper um diese Enumerationseigenschaften erstellen.

Der zugrunde liegende Typ einer Enumeration ist ein Byte oder eine ganze Zahl, also warum zum Teufel ist es als String/Varchar gespeichert? Das macht keinen Sinn. Sogar das Entity-Framework hat es mit seiner Enum-Unterstützung nach Jahren richtig gemacht ...

Was ist die Lösung in diesem Fall?

Scheint dieser Kerl hat das gleiche Problem: https://github.com/tapmantwo/enumflags

Antwort

4

Späte Antwort, aber in v4.0.8 der [Flags] -Attribut wurde Aufzählungen hinzugefügt, die ServiceStack macht immer die emum als int behandeln.

From v4.0.54 Sie können nun auch die Verwendung [EnumAsInt] Attribut, das die Enum Datenbank als int in OrmLite sparen, aber wenn die Serialisierung wird es so als String tun.

5

Soweit ich ormlite Version 3 doesnt Unterstützung Enum wissen, wer über die nächste Version kennen. eine Möglichkeit, Ihre Lösung gibt es nur Integer-Wrapper

public int VisibleDayOfWeek { get; set; } 

[Ignored] 
public VisibleDayOfWeek VisibleDayOfWeekEnum 
{ 
    get { return (VisibleDayOfWeek)VisibleDayOfWeek; } 
    set { VisibleDayOfWeek = (int)value; } 
} 

Auch die Rahmeneinheit wird es nach vielen Jahren mit seiner ENUM Unterstützung Recht zur Nutzung

Rahmen Unternehmen haben ENUM Unterstützung nach Version> 4, auch Sie sollten nicht erwarten, dass zu viel Entity Framework reich ist, während ormlite genau wie sein Name 'Lite' ist.

+1

Wie schon gesagt in meiner Frage möchte ich keine Integer-Wrapper. Und in vielen Teilen ist mlite reichhaltiger als EF. EF hat keine partielle Aktualisierung oder Ausdruck basierte API für Update, Löschen und vieles mehr. Und Ormlite v4 ist eine Weile draußen. – HelloWorld

+1

Es liegt daran, dass Sie nur das Feature von ormlite verwenden, das ef nicht hat, wenn Sie davon ausgehen, dass ormlite nicht viel mehr hat. Es gibt keine andere Lösung als Integer-Wrapper oder vielleicht fork ormlite, und es unterstützt Enum. – kirie

+1

Das Flags wurde bereits als Fehler gemeldet. Jetzt warte ich, dass der Autor auch bestätigen wird, dass enum-Wert zu string und nicht zu int als ein Fehler angesehen wird. https://github.com/ServiceStack/ServiceStack.Ormlite/commit/6c4c608443e919aac23b647f97fed1c86d89c52d – HelloWorld

Verwandte Themen