Я использовал это Как вы отображаете enum в качестве значения int с беглым NHibernate? для отображения в прошлом, но я недавно обновился до NHibernate 3, и это, похоже, больше не работает.Я установил контрольные точки в своем классе EnumConvention, и они не попадают под удар.Запрос к базе данных имеет перечисление в виде строки, которая является конфигурацией по умолчанию.
Как это работает с NHibernate 3?
Обновление
Вот часть созданного файла сопоставления:
<property name="ComponentType" type="FluentNHibernate.Mapping.GenericEnumMapper`1[[...ComponentType, ..., Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], FluentNHibernate, Version=1.1.0.0, Culture=neutral, PublicKeyToken=8aa435e3cb308880">
<column name="ComponentTypeId" />
</property>
Неправильно, что он будет использовать GenericEnumMapper
, если для перечислений указано IUserTypeConvention
.
Вот мое соглашение:
public class EnumConvention : IUserTypeConvention
{
public void Accept( IAcceptanceCriteria<IPropertyInspector> criteria )
{
criteria.Expect( e => e.Property.PropertyType.IsEnum );
}
public void Apply( IPropertyInstance instance )
{
instance.CustomType( instance.Property.PropertyType );
}
}