Comment avez-vous carte un enum comme une valeur int avec NHibernate fluent?
Question dit tout, vraiment, la valeur par défaut est à la carte comme un string
mais j'en ai besoin pour carte comme un int
.
Je suis actuellement à l'aide PersistenceModel
pour le réglage de mon conventions si cela fait une différence. Merci à l'avance.
Mise à jour
Constaté que l'obtention sur la dernière version du code à partir du tronc résolu mes malheurs.
- si vous avez résolu le problème vous-même, vous devez répondre, puis marquez-le comme la réponse correcte afin de futurs chercheurs vont le trouver.
- Pouvez-vous s'il vous plaît poster la réponse?
- Fait les gars. Désolé pour le retard. Je n'étais pas vraiment sûr de ce que j'étais censé le faire avec une question qui a été plus d'une non-question que j'ai juste besoin de la dernière version des bibliothèques.
- De la nourriture pour les robots de google: j'ai été faire "illégale d'accès pour le chargement de la collection" avant de mettre en œuvre ce pour mon enum cartographie.
Vous devez vous connecter pour publier un commentaire.
La façon de définir la présente convention changé parfois, il ya, c'est maintenant :
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 le code le plus récent est:
Le type personnalisé forces qu'il soit géré comme une instance de l'enum plutôt que d'utiliser le
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.
Ce 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.
De faire toutes les énumérations être mappé comme des entiers, vous pouvez maintenant créer une convention comme suit:
Alors votre cartographie ne doit être:
Vous ajouter à la convention de vos Couramment NHibernate cartographie comme;
N'oubliez pas d'accepter les valeurs null énumérations (comme
ExampleEnum? ExampleProperty
)! Ils doivent être vérifiés séparément. C'est la façon dont c'est fait avec le nouveau FN style de configuration:int
? Et quand le type accepte les Drapeaux? Comme:MyEnum.Active | MyEnum.Paused
c'est de cette façon que j'ai mappé un enum propriété avec une valeur int:
fonctionne pour moi!
Pour ceux qui utilisent Couramment NHibernate avec mappant automatiquement (et potentiellement un conteneur IoC):
La
IUserTypeConvention
est que @Julien's réponse ci-dessus: https://stackoverflow.com/a/1706462/878612La fluidité de la NHibernate mappant automatiquement la configuration pourrait être configuré comme ceci:
*Puis le
CreateSessionFactory
peut être utilisé dans un Cio, tels que le Château de Windsor (à l'aide d'un PersistenceFacility et de l'installateur) facilement. *Vous pouvez créer une NHibernate
IUserType
, et de spécifier à l'aide deCustomTypeIs<T>()
sur la carte de propriété.Vous devez garder les valeurs de type int /tinyint dans votre base de données de la Table. Pour la cartographie de votre enum vous devez spécifier le mappage correctement. Veuillez voir ci-dessous la cartographie et de l'enum de l'échantillon,
De La Cartographie Des
Enum