2009-10-27 60 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