2012-12-14 13 views
5

Ho bisogno di mappare un enumerazione nullable nella mia classe ma sto ottenendo eccezioni.Fluent NHibernate mapping nullable enum

NHibernate.PropertyAccessException: Cast non valido (controllare la corrispondenza per mancata corrispondenza del tipo di proprietà); setter di App.Model.Stock ---> System.InvalidCastException: Il cast specificato non è valido.

Ho ridotto il problema a una proprietà specifica, che descrivo di seguito.

Rispondeva in precedenza a here, ma la soluzione rimanda a una pagina che non esiste più.

Ecco il mio codice, che ho ridotto a contenere solo le parti di cui mi occupo.

public enum eColor 
{ 
    Red, 
    Blue 
} 

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

Ecco il mio mappatura (ridotta):

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

Ho provato tutti i seguenti, con gli stessi risultati:

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(); 

Questo sembrava essere un bug una lunga tempo fa e c'era una soluzione. Sto utilizzando Fluent 1.3.0.0 e NHibernate 3.3.1.4000.

risposta

8

È necessario specificare il tipo enum in CustomType <T>(), ad es. CustomType <eColor>(). Questo ti darà numeri interi nel database.

+0

Aveva lo stesso problema, questo ha funzionato, grazie! – iamserious