Вы не можете напрямую отобразить это. Есть два правила для рассмотрения:
- Всегда используйте интерфейсы для коллекций (например,
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