2012-12-14 5 views
5

Мне нужно отобразить нулевое перечисление в моем классе, но я получаю исключения.Fluent NHibernate mapping nullable enum

NHibernate.PropertyAccessException: Invalid Cast (проверьте ваше сопоставление для несоответствий типа свойства); setter из App.Model.Stock ---> System.InvalidCastException: Указанное приведение недействительно.

Я сузил проблему до одного конкретного свойства, которое я описываю ниже.

Это было ранее сообщено here, но решение ссылается на страницу, которая больше не существует.

Вот мой код, который я сократил, чтобы содержать только те части, которые меня интересуют.

public enum eColor 
{ 
    Red, 
    Blue 
} 

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

Вот мое отображение (урезанная):

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

Я попытался все следующие с теми же результатами:

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

Это, как представляется, ошибка долго назад, и было обходное решение. Я использую Fluent 1.3.0.0 и NHibernate 3.3.1.4000.

ответ

8

Вы должны указать тип перечисления в пользовательском типе <T>(), например. CustomType <eColor>(). Это даст вам целые числа в базе данных.

+0

Если у вас такая же проблема, это сработало, спасибо! – iamserious

Смежные вопросы