Nie można bezpośrednio go odwzorować. Istnieją dwie zasady, które należy rozważyć:
- zawsze używać interfejsy kolekcji (np
IList<T>
, IDictionary<K,V>
.)
- NH nie obsługuje zagnieżdżonych zbiorów. Nigdy przedtem nie widziałem aplikacji przed i nigdy nie słyszałem, żeby ktoś o to prosił.
Połóż listę ciąg do klasy i wykorzystania interfejsów:
class StringList
{
IList<string> Strings { get; private set; }
}
class Entity
{
private IDictionary<string, StringList> stringDict;
}
Można nawet zobaczyć pewne korzyści z posiadania takiej klasy.
mapowanie:
<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>
mapy do trzech tabelach:
- Tabela
Entity
- Tabela
Entity_StringDict
- Kolumna
Entity_FK
- Kolumna
Key
- Tabela
Entity_StringDict_Strings
- Kolumna
Entity_StringDict_FK
- Kolumna
String
Znakomity, dam go spróbować! – ulu
Hmm Otrzymuję komunikat o błędzie: Błąd sprawdzania poprawności XML: Element "element złożony" w przestrzeni nazw "urn: nhibernate-mapping-2.2" ma nieprawidłowy element podrzędny "worek" w przestrzeni nazw "urn: nhibernate-mapping-2.2" . Lista możliwych oczekiwanych elementów: 'rodzic, właściwość, wiele do jednego, zagnieżdżony element złożony' w przestrzeni nazw 'urn: nhibernate-mapping-2.2'. Korzystanie z Nhibernate 2.0.1 .. – ulu
Dokumenty mówią także: "Elementy złożone mogą zawierać komponenty, ale nie kolekcje". – ulu