NHibernate:映射列表字典

ulu*_*ulu 8 mapping nhibernate

我的班级有一个类型的领域Dictionary<string, List<string>>.用NHibernate映射它的最佳方法是什么?我最好把它作为一个领域,不想暴露它.

非常感谢!

乌鲁

Ste*_*ger 7

你无法直接映射它.有两个要考虑的规则:

  • 始终使用集合接口(例如IList<T>,IDictionary<K,V>)
  • NH不支持嵌套集合.我以前从未见过它的应用程序,也从未听过有人要求它.

将您的字符串列表放入一个类并使用接口:

class StringList
{
  IList<string> Strings { get; private set; }
}

class Entity
{
  private IDictionary<string, StringList> stringDict;
}
Run Code Online (Sandbox Code Playgroud)

你甚至可能会看到有这样一个课程的一些优点.

制图:

<class name="Entity">
  ...
  <map name="stringDict" table="Entity_StringDict" access="field">
    <key column="Entity_FK"/>
    <index column="Key" type="System.String"/>
    <composite-element class="StringList">
      <bag name="Strings" table="Entity_StringDict_Strings">
        <key column="Entity_StringDict_FK"/>
        <element type="System.String" column="String"/>
      </bag>
    </composite-element>
  </map>
</class>
Run Code Online (Sandbox Code Playgroud)

映射到三个表:

  • Entity
  • Entity_StringDict
    • Entity_FK
    • Key
  • Entity_StringDict_Strings
    • Entity_StringDict_FK
    • String