La question dit tout vraiment, la valeur par défaut est de mapper en tant que string
mais j'en ai besoin pour mapper en tant que int
.
J'utilise actuellement PersistenceModel
pour définir mes conventions si cela fait une différence. Merci d'avance.
Mise à jour J'ai trouvé que l'accès à la dernière version du code à partir du coffre a résolu mes problèmes.
nhibernate
fluent-nhibernate
Garry Shutler
la source
la source
Réponses:
La façon de définir cette convention a parfois changé il y a, c'est maintenant:
la source
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:
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:
Ensuite, votre cartographie doit seulement être:
Vous ajoutez la convention à votre mappage Fluent NHibernate comme ceci;
la source
N'oubliez pas les énumérations nullables (comme
ExampleEnum? ExampleProperty
)! Ils doivent être vérifiés séparément. Voici comment procéder avec la nouvelle configuration de style FNH:la source
int
? Et quand le type accepte les drapeaux? Comme:MyEnum.Active | MyEnum.Paused
voici comment j'ai mappé une propriété enum avec une valeur int:
travaille pour moi!
la source
Pour ceux qui utilisent Fluent NHibernate avec Automapping (et potentiellement un conteneur IoC):
C'est
IUserTypeConvention
comme la réponse de @ Julien ci-dessus: https://stackoverflow.com/a/1706462/878612La configuration de Fluent NHibernate Automapping peut être configurée comme ceci:
* Ensuite, le
CreateSessionFactory
peut être utilisé dans un IoC tel que Castle Windsor (en utilisant une PersistenceFacility et un installateur) facilement. *la source
Vous pouvez créer un NHibernate
IUserType
et le spécifier en utilisantCustomTypeIs<T>()
sur la carte des propriétés.la source
Vous devez conserver les valeurs int / tinyint dans votre table DB. Pour mapper votre énumération, vous devez spécifier le mappage correctement. Veuillez voir ci-dessous le mappage et l'exemple d'énumération,
Classe de cartographie
Enum
la source