Estou trabalhando com um sistema utilizando NHibernate, e utilizamos uma convenção para armazenar o valor de campos enumerados como Inteiro(Int32) e não o texto puro como é padrão do NHibernate, nos utilizamos a seguinte convenção para que isso ocorra:
public class ConvencaoEnum : IUserTypeConvention
{
public void Accept(IAcceptanceCriteria<IPropertyInspector> criteria)
{
criteria.Expect(x => x.Property.PropertyType.IsEnum);
}
public void Apply(IPropertyInstance target)
{
target.CustomType(target.Property.PropertyType);
}
}
Após isso é necessário na criação do SessionFactory será necessário definir que irá utilizar essa convenção, uma forma comum é buscando pelo Assembly aonde a classe de criação do session factory está assim:
_sessionFactory = Fluently.Configure(config)
.Mappings(m => m.FluentMappings
.AddFromAssemblyOf<SessionFactoryClass>()
.Conventions.AddFromAssemblyOf<SessionFactoryClass>()
.BuildSessionFactory();
Isso estava funcionando tranquilamente até quando fui adicionar uma nova classe que iria persistir no Banco de dados e coloquei um enumerado e mesmo com a convenção ele estava armazenando string no Banco de dados, após algumas pesquisas com o pessoal que trabalho descobri que eu tinha definido o Enumerado como Nullable, removendo a possibilidade de Nullable dele e o armazenamento como inteiro desse valor voltou a funcionar.
Após fazer isso me surgiu uma divida como eu iria definir o valor dessa propriedade digamos como nula, para definir um valor nulo para um enumerado você apenas precisa fazer igual ao código abaixo
MeuEnumerado nomeVariavel = default(MeuEnumerado);