Donc, comme mentionné, obtenir la dernière version de Fluent NHibernate du coffre m'a amené là où je devais être. Un exemple de mappage pour une énumération avec le dernier code est:
Map(quote => quote.Status).CustomTypeIs(typeof(QuoteStatus));
Le type personnalisé l'oblige à être traité comme une instance de l'énumération plutôt que d'utiliser le GenericEnumMapper<TEnum>
.
J'envisage en fait de soumettre un correctif pour pouvoir changer entre un mappeur enum qui persiste une chaîne et un qui persiste un int, car cela semble être quelque chose que vous devriez pouvoir définir comme convention.
Cela est apparu sur mon activité récente et les choses ont changé dans les nouvelles versions de Fluent NHibernate pour rendre cela plus facile.
Pour que toutes les énumérations soient mappées sous forme d'entiers, vous pouvez maintenant créer une convention comme celle-ci:
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;
}
}
Ensuite, votre cartographie doit seulement être:
Map(quote => quote.Status);
Vous ajoutez la convention à votre mappage Fluent NHibernate comme ceci;
Fluently.Configure(nHibConfig)
.Mappings(mappingConfiguration =>
{
mappingConfiguration.FluentMappings
.ConventionDiscovery.AddFromAssemblyOf<EnumConvention>();
})
./* other configuration */