Sie können es nicht direkt zuordnen. Es gibt zwei Regeln zu beachten:
- Immer Schnittstellen für Sammlungen (zB
IList<T>
, IDictionary<K,V>
.)
- NH nicht unterstützt verschachtelte Sammlungen. Ich habe noch nie zuvor eine Anwendung dafür gesehen und hörte nie jemanden, der es anfordert.
Setzen Sie Ihre Liste der Zeichenfolge in eine Klasse und Verwendung Schnittstellen:
class StringList
{
IList<string> Strings { get; private set; }
}
class Entity
{
private IDictionary<string, StringList> stringDict;
}
Sie könnten sogar einige Vorteile mit einer solchen Klasse.
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>
Karten zu drei Tabellen:
- Tabelle
Entity
- Tabelle
Entity_StringDict
- Spalte
Entity_FK
- Spalte
Key
- Tabelle
Entity_StringDict_Strings
- Spalte
Entity_StringDict_FK
- Säule
String
Fantastisch, ich werde es versuchen! – ulu
Hmm Ich erhalte eine Fehlermeldung: XML-Validierungsfehler: Das Element 'Composite-Element' in Namespace 'urn: nhibernate-Mapping-2.2' hat ungültige Kind-Element 'Tasche' im Namensraum 'urn: nhibernate-Mapping-2.2' . Liste der möglichen Elemente erwartet: 'Eltern, Eigenschaft, viele-zu-eins, verschachtelte-Composite-Element' im Namensraum 'urn: nhibernate-mapping-2.2'. Mit Nhibernate 2.0.1 .. – ulu
Auch sagt die Dokumentation „Verbundelemente Komponenten enthalten können, aber nicht Sammlungen“. – ulu