Vous ne pouvez pas le mapper directement. Il y a deux règles à prendre en compte:
- Toujours utiliser des interfaces pour les collections (par exemple
IList<T>
, IDictionary<K,V>
.)
- NH ne supporte pas les collections imbriquées. Je n'ai jamais vu une application pour cela avant et je n'ai jamais entendu quelqu'un le demander.
Mettez votre liste de chaînes dans une interface de classe et d'utilisation:
class StringList
{
IList<string> Strings { get; private set; }
}
class Entity
{
private IDictionary<string, StringList> stringDict;
}
Vous pourriez même voir certains avantages d'une telle classe.
Cartographie:
<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>
Carte à trois tableaux:
- Tableau
Entity
- Tableau
Entity_StringDict
- Colonne
Entity_FK
- Colonne
Key
- Tableau
Entity_StringDict_Strings
- Colonne
Entity_StringDict_FK
- Colonne
String
fantastique, je vais donner un essai! – ulu
Hmm Je reçois une erreur: Erreur de validation XML: L'élément 'composite-element' dans l'espace de noms 'urn: nhibernate-mapping-2.2' a un élément enfant invalide 'bag' dans l'espace de noms 'urn: nhibernate-mapping-2.2' . Liste des éléments possibles attendus: 'parent, propriété, plusieurs-à-un, élément-composite-imbriqué' dans l'espace-noms 'urn: nhibernate-mapping-2.2'. En utilisant Nhibernate 2.0.1 .. – ulu
Aussi, les docs disent, "Les éléments composites peuvent contenir des composants mais pas des collections". – ulu