NHibernate: отображение словаря списков - PullRequest
8 голосов
/ 20 августа 2009

В моем классе есть поле типа Dictionary<string, List<string>>. Как лучше всего сопоставить это с NHibernate? Я бы лучше оставил это как поле, не хочу выставлять это.

Большое спасибо!

ула

1 Ответ

7 голосов
/ 21 августа 2009

Вы не можете напрямую отобразить это. Есть два правила для рассмотрения:

  • Всегда используйте интерфейсы для коллекций (например, IList<T>, IDictionary<K,V>)
  • NH не поддерживает вложенные коллекции. Я никогда не видел заявку на это раньше и никогда не слышал, чтобы кто-то просил об этом.

Поместите ваш список строк в класс и используйте интерфейсы:

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

class Entity
{
  private IDictionary<string, StringList> stringDict;
}

Вы могли бы даже увидеть некоторые преимущества наличия такого класса.

Отображение:

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

Карты для трех таблиц:

  • Таблица Entity
  • Таблица Entity_StringDict
    • Колонка Entity_FK
    • Колонка Key
  • Таблица Entity_StringDict_Strings
    • Колонка Entity_StringDict_FK
    • Колонка String
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...