2011-12-01 55 views
3

假設我有一個類「So​​meClass」,它有一個查找字典: DataDictionary;NHibernate 3.2由代碼(一致)ClassMapping爲字典屬性

我現在有這樣的SomeClass.hbm.xml映射:

<class name="SomeClass> 

    <id name="ID" type="System.Guid"> 
    <generator class="guid" /> 
    </id> 

    <map name="DictionaryProperty" table="SomeClass_Data"> 
    <key column="SomeClassID" /> 
    <index column="Key" type="System.String" /> 
    <element column="Value" type="System.String" /> 
    </map> 

</class> 

我想使用NHibernate的新的(3.2版本)通過代碼映射。我將如何映射上面的字典屬性?

目前我有:

public class SomeClassMap :ClassMap<SomeClass> 
    { 

    public SomeClassMap() 
    { 
     Id(x => x.ID, mapping => mapping.Generator(Generators.Guid)); 
     Map(x = x.DictionaryProperty, mapping => 
      { 
       mapping.Key(k => k.Column("SomeClassID")); 
       mapping.Table("SomeClassData"); 
      }); 
    } 

    } 

晴我在爲如何指定索引的等價和元素的字典映射的損失。

回答

5

字典映射的每個部分需要單獨的代表:

Map(x => x.DictionaryProperty, 
    mapping => 
    { 
     mapping.Key(k => k.Column("SomeClassID")); 
     mapping.Table("SomeClassData"); 
    }, 
    mapping => mapping.Element(k => k.Column("Key")), 
    mapping => mapping.Element(k => k.Column("Value"))); 

第一Elementmap-keyindex是過時用於map),並且第二個是element

+0

「索引對於映射已經過時了」......官方文檔沒有提及這= =( – wllmsaccnt

+0

是的......我正在爲此工作一個文檔補丁,但是失去了它,無論如何'索引'仍然有效,它只是'map-key'是首選。 –

相關問題