2009-08-20 2 views

ответ

7

Вы не можете непосредственно его просмотреть. Есть два правила, которые необходимо учитывать:

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

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

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

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

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

Mapping:

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

Потрясающе, я дам ему попробовать! – ulu

+1

Хмм, я получаю сообщение об ошибке: Ошибка проверки XML: элемент «составной элемент» в пространстве имен «urn: nhibernate-mapping-2.2» имеет недопустимый дочерний элемент «сумка» в пространстве имен «urn: nhibernate-mapping-2.2» , Список ожидаемых элементов: «parent, property, many-to-one, inested-composite-element» в пространстве имен «urn: nhibernate-mapping-2.2». Использование Nhibernate 2.0.1 .. – ulu

+0

Кроме того, в документах говорится: «Композитные элементы могут содержать компоненты, но не коллекции». – ulu

Смежные вопросы