2009-08-20 2 views

Antwort

7

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

Fantastisch, ich werde es versuchen! – ulu

+1

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

+0

Auch sagt die Dokumentation „Verbundelemente Komponenten enthalten können, aber nicht Sammlungen“. – ulu