2009-05-07 4 views
1

Мне не удалось сохранить нулевое перечисление, используя NHibernate с Fluent NHibernate. NHibernate пытается сохранить строковое представление перечисления, и я получаю ошибкуКак я могу отобразить нулевое перечисление в NHibernate?

System.Data.SqlClient.SqlException: Conversion failed when converting the 
nvarchar value 'VGS' to data type tinyint. 

Свойства определяются как

public virtual CostContributor? ReplacementContributor { get; private set; } 

и отображение

Map(x => x.ReplacementContributor).CustomTypeIs(typeof(CostContributor?)); 

Я пробовал каждый сочетание CustomTypeIs и CustomSqlTypeIs, включая замену int? или байт? для CostContributor ?, но ничего не сработало. Он отлично работает, если я делаю его недействительным.

Можно ли отобразить нулевое перечисление в NHibernate? Или это ошибка или неподдерживаемая функция в NHibernate?

Если я не могу выполнить эту работу, я собираюсь добавить неопределенное значение для моего перечисления в качестве обходного пути.

ответ

2

Это был bug and it's been fixed.

+0

Указанная здесь ссылка мертва, но на вопрос был дан ответ на http://stackoverflow.com/questions/13881971/fluent-nhibernate-mapping-nullable-enum – bunggo

0

Не знаете, как сделать это правильно, но вот еще один обходной путь:

Добавить класс под названием CostContributorEntity. Класс будет иметь только свойство: ID, типа CostContributor. Вам не нужно создавать реальную таблицу, если вы этого не хотите.

В классах-потребителях замена класса замены должна быть типа CostContributorEntity и отображать ее как Ссылки (x => x.ReplacementContributor);

Используйте session.Load (CostContributor.Blahblah1), чтобы создать экземпляр объекта CostContributorEntity, который вы можете назначить на ReplacementContributor.