2009-10-27 5 views
0

J'ai demandé cela ailleurs et non de réponse raisonnable acartographie NHibernate de IDictionary générique

J'essaie de mapper un IDictionary. J'ai cette cartographie:

<class name="MyProject.Item, MyProject" table="Item"> 
<...> 
<map name="Properties" access="property" table="ItemProperties" lazy="false"> 
    <key column="ItemID" /> 
    <index column="Idx" type="int" /> 
<element column="Value" type="System.Boolean, mscorlib"/> 
</map> 

je peux persister des données, mais quand les données sont récupérées je reçois une exception NHibernate: { "La valeur « 0 » est pas de type « Project.PropertyType » et ne peut pas être utilisé dans cette collection générique Nom du paramètre: key "}

Il ne peut donc pas être mappé à l'énumération, mais pourquoi? si j'ai une propriété régulière qui utilise une énumération, cela fonctionne bien.

Est-ce que j'essaie de faire même possible? Je ne trouve pas beaucoup d'informations sur cela.

Répondre

0

Votre mappage affiche la clé sous la forme d'un nombre entier et non enum. Pour mapper correctement l'énumération, utilisez type="MyProject.Project.PropertyType, MyProject".

Cependant, normalement pour une énumération, la meilleure approche consiste à laisser l'information de type complètement hors du fichier de mappage et de la laisser capturer par réflexion. Ma lecture de la source NHib implique que si vous êtes en train de cartographier un IDictionary<K,V> générique, alors NHib devrait ramasser le type exact de votre clé par réflexion. IOW vous devriez toujours pouvoir omettre l'attribut type.

+0

Merci, je vais essayer de supprimer les informations de type, je dois utiliser ActiveRecord comme couche supplémentaire sur le dessus, ce qui rend les choses un peu plus compliquées. – Mark

Questions connexes