Donc, comme mentionné, l'obtention de la dernière version de NHibernate Fluent hors du tronc, m'a amené à l'endroit où je devais être. Un exemple de cartographie pour un enum avec la dernière version du code est:
Map(quote => quote.Status).CustomTypeIs(typeof(QuoteStatus));
Le type personnalisé forces qu'il soit géré comme une instance de l'enum plutôt que d'utiliser l' GenericEnumMapper<TEnum>
.
En fait, je suis envisagent de soumettre un patch pour être en mesure de changer entre un enum mappeur qui persiste, une chaîne et un qui persiste int comme cela semble être quelque chose que vous devriez être en mesure de la définir comme une convention.
Cette surgi sur mon activité récente et les choses ont changé dans les versions plus récentes de Fluent NHibernate pour rendre cela plus facile.
Pour faire tous les énumérations être mappé comme des entiers, vous pouvez maintenant créer une convention comme suit:
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 ne doit être:
Map(quote => quote.Status);
Vous ajoutez de la convention de vos Couramment NHibernate cartographie comme;
Fluently.Configure(nHibConfig)
.Mappings(mappingConfiguration =>
{
mappingConfiguration.FluentMappings
.ConventionDiscovery.AddFromAssemblyOf<EnumConvention>();
})
./* other configuration */