NHibernate 3.2 By Code(Conformist)ClassMapping For Dictionary Property

时间:2011-12-01 17:31:48

标签: c# .net nhibernate mapping-by-code

假设我有一个“SomeClass”类,它有一个查找字典: 数据字典;

我目前在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");
           });
     }

  }

大多数情况下,我不知道如何指定索引的等价物和字典映射的元素。

1 个答案:

答案 0 :(得分: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