2009-10-27 33 views
0

我已经问过这个地方,没有得到任何明智的答复nHibernate映射通用IDictionary

我想映射一个IDictionary。我有这样的映射:

<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> 

我可以持续数据,但是当数据被检索我得到一个的nHibernate异常: {“的值‘0’的类型是不是‘Project.PropertyType’,不能使用在这个泛型集合中。参数名称:key“}

所以它不能映射到枚举,但为什么?如果我有一个使用枚举的常规属性,它可以正常工作。

我试图做甚至可能吗?我无法找到关于这样做的很多信息。

回答

0

您的映射将键显示为整数,而不是枚举。要正确映射枚举,请使用type="MyProject.Project.PropertyType, MyProject"

但是,通常对于枚举来说,最好的方法是将类型信息完全保留在映射文件之外,并让NHib通过反射来拾取它。我对NHib源文件的阅读意味着如果你映射到一个通用的IDictionary<K,V>那么NHib应该通过反射来获取你的密钥的确切类型。 IOW你仍然应该能够省略type属性。

+0

谢谢,我将试验删除类型信息,我不得不使用ActiveRecord作为顶层的额外层,这会让事情变得更复杂一些。 – Mark