No se puede asignar directamente. Hay dos reglas a considerar:
- utilizan Siempre interfaces para colecciones (por ejemplo
IList<T>
, IDictionary<K,V>
.)
- NH no soporta colecciones anidadas. Nunca he visto una solicitud antes del y nunca escuché a alguien que lo solicitó.
Deja tus lista de cadena en una clase y uso de interfaces:
class StringList
{
IList<string> Strings { get; private set; }
}
class Entity
{
private IDictionary<string, StringList> stringDict;
}
podrá ver incluso algunas ventajas de tener una clase de este tipo.
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>
Mapas a tres tablas:
- Tabla
Entity
- Tabla
Entity_StringDict
- Columna
Entity_FK
- Columna
Key
- Tabla
Entity_StringDict_Strings
- Columna
Entity_StringDict_FK
- Columna
String
fantástico, voy a dar una oportunidad! – ulu
Hmm Recibo un error: Error de validación XML: el elemento 'compuesto-elemento' en el espacio de nombres 'urn: nhibernate-mapping-2.2' tiene un elemento secundario no válido 'bolsa' en el espacio de nombres 'urna: nhibernate-mapping-2.2' . Lista de posibles elementos esperados: 'parent, property, many-to-one, elemento compuesto anidado' en el espacio de nombres 'urn: nhibernate-mapping-2.2'. Usando Nhibernate 2.0.1 .. – ulu
También, los documentos dicen, "Los elementos compuestos pueden contener componentes pero no colecciones". – ulu