J'ai une classe qui a un type d'énumération indiquant si le type de message est envoyé par courrier électronique ou SMS. Le type Enum est défini: la classe qui utilise ce type ressemble à: p> quand j'essaie de persister une entité de type Rappel à la base de données Cependant, j'obtiens l'erreur suivante: p> Le champ de support est de type Je suis sûr que le comportement par défaut de NHibernate est de mapper Enums en tant qu'int. ne le fais pas dans ce cas? J'utilise SQL Server 2005, si cela importe. P> p> int code>, donc je ne sais pas pourquoi NHibernate tente de cartographier la représentation de chaîne par défaut. J'utilise fluent Nhibernate et que le code de cartographie correspondant est le suivant: p>
3 Réponses :
Je fais la même chose et je l'ai fait fonctionner comme si ...
Dans mon cas, l'employé est la classe Enum p>
Ce serait parfait si je voulais jamais le faire sur une base spécifique à la propriété.
Je ne sais pas pourquoi cette personne continue de poster, puis de supprimer leur commentaire ou de leur réponse, mais le lien qu'ils a fourni () répond à ma question. J'ai choisi de ne pas aller avec une définition complète de la classe de coups de la convention, mais plutôt une convention en ligne dans le code de mappages, comme: La dernière déclaration du constructeur de la convention a fait l'affaire. Je suis curieux de savoir pourquoi la défaillance de Nibernate fluide consiste à mapper Enums comme des chaînes maintenant. Cela ne semble pas avoir beaucoup de sens. P> p>
Lorsque vous mappez un Enum comme INT, seule cette application (qui définissait l'ENUM) sait ce que cela signifie dans la DB. C'est comme un numéro magique dans la base de données ...
Désolé, j'ai supprimé le premier commentaire car après avoir réaffecté le code réalisé où j'ai commis l'erreur et que le commentaire n'était pas pertinent et que la seconde semblait évidente, car elle était l'une des premières hits Google, alors je me suis dit que vous déjà vu ça.
@DotJoe: Cela semble raisonnable. J'avais travaillé avec des versions antérieures de la bibliothèque qui a fait l'inverse (mappé comme INT par défaut plutôt que par défaut), cependant, il était donc incroyablement déroutant pour ce changement de comportement pour commencer comme il l'a fait.
Vous ne devez jamais mapper Enum comme INT dans NHibernate. Cela devient une raison d'avoir un Mises à jour des fantômes . P>
Le meilleur moyen de ne pas définir une propriété de type dans les mappages XML. Pour atteindre cela dans NHibernate fluide, vous pouvez utiliser Certaines informations supplémentaires que vous pouvez trouver Ici . p> .customtype (string.empty) code>. P>
Le courrier électronique est la valeur de chaîne de la propriété Type. NHibernate devrait essayer de le stocker comme valeur entière 1, mais il essaie de stocker la chaîne 'email' à la place de l'erreur. Je ne suis pas sûr de savoir pourquoi ça fait ça ...
ou Stackoverflow.com/questions/1483044/...