2012-12-14 9 views
5

Ich muss eine NULL-Enum in meiner Klasse zuordnen, aber bekomme Ausnahmen.Fließende NHibernate Mapping Nullable Enum

NHibernate.PropertyAccessException: Ungültige Cast (überprüfen Sie Ihre Zuordnung für Fehlertypen der Eigenschaftstyp); Setter von App.Model.Stock ---> System.InvalidCastException: Angegebener Cast ist nicht gültig.

Ich habe das Problem auf eine bestimmte Eigenschaft eingeschränkt, die ich unten beschreibe.

Dies wurde zuvor beantwortet here, aber die Lösung verknüpft mit einer Seite, die nicht mehr existiert.

Hier ist mein Code, den ich reduziert habe, um nur die Teile zu enthalten, mit denen ich mich beschäftige.

public enum eColor 
{ 
    Red, 
    Blue 
} 

public class Stock 
{ 
    public virtual eColor? Color { get; protected set; } 
} 

Hier ist meine Mapping (abgespeckte):

public class StockMap : ClassMap<Stock> 
{ 
    Map(x => x.Color).CustomType<int>(); 
} 

Ich habe alle der folgenden mit den gleichen Ergebnissen versucht:

Map(x => x.Color).CustomType<int>(); 
Map(x => x.Color).CustomType<int?>(); 
Map(x => x.Color).CustomType<int>().Nullable(); 
Map(x => x.Color).CustomType<int?>().Nullable(); 

Dies schien eine lange ein Problem zu sein Zeit her und es gab einen Workaround. Ich verwende Fluent 1.3.0.0 und NHibernate 3.3.1.4000.

Antwort

8

Sie sollten den Enum-Typ in CustomType <T>() angeben, z. CustomType <eColor>(). Dadurch erhalten Sie Integer in der Datenbank.

+0

Hatte das gleiche Problem, das hat funktioniert, danke! – iamserious