Я использовал этот Как вы сопоставляете 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 );
}
}