Entonces, como se mencionó, obtener la última versión de Fluent NHibernate del maletero me llevó a donde tenía que estar. Un ejemplo de mapeo para una enumeración con el último código es:
Map(quote => quote.Status).CustomTypeIs(typeof(QuoteStatus));
El tipo personalizado obliga a que se maneje como una instancia de la enumeración en lugar de usar GenericEnumMapper<TEnum>
.
De hecho, estoy considerando enviar un parche para poder cambiar entre un mapeador de enumeración que persiste una cadena y uno que persiste un int, ya que parece algo que debería poder establecer como una convención.
Esto apareció en mi actividad reciente y las cosas han cambiado en las versiones más nuevas de Fluent NHibernate para facilitar esto.
Para hacer que todas las enumeraciones se mapeen como números enteros, ahora puede crear una convención como esta:
public class EnumConvention : IUserTypeConvention
{
public bool Accept(IProperty target)
{
return target.PropertyType.IsEnum;
}
public void Apply(IProperty target)
{
target.CustomTypeIs(target.PropertyType);
}
public bool Accept(Type type)
{
return type.IsEnum;
}
}
Entonces tu mapeo solo tiene que ser:
Map(quote => quote.Status);
Agrega la convención a su mapeo Fluent NHibernate así;
Fluently.Configure(nHibConfig)
.Mappings(mappingConfiguration =>
{
mappingConfiguration.FluentMappings
.ConventionDiscovery.AddFromAssemblyOf<EnumConvention>();
})
.