Quindi, come accennato, ottenere l'ultima versione di Fluent NHibernate dal bagagliaio mi ha portato dove dovevo essere. Un esempio di mappatura per un'enumerazione con il codice più recente è:
Map(quote => quote.Status).CustomTypeIs(typeof(QuoteStatus));
Il tipo personalizzato impone che venga gestito come un'istanza dell'enumerazione anziché utilizzare il GenericEnumMapper<TEnum>
.
In realtà sto considerando di inviare una patch per poter cambiare tra un mappatore enum che persiste una stringa e uno che persiste un int in quanto sembra qualcosa che dovresti essere in grado di impostare come convenzione.
Questo è saltato fuori dalla mia attività recente e le cose sono cambiate nelle versioni più recenti di Fluent NHibernate per renderlo più facile.
Per fare in modo che tutte le enumerazioni siano mappate come numeri interi, ora puoi creare una convenzione in questo modo:
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;
}
}
Quindi la tua mappatura deve essere solo:
Map(quote => quote.Status);
Aggiungi la convenzione alla tua mappatura Fluent NHibernate in questo modo;
Fluently.Configure(nHibConfig)
.Mappings(mappingConfiguration =>
{
mappingConfiguration.FluentMappings
.ConventionDiscovery.AddFromAssemblyOf<EnumConvention>();
})
./* other configuration */