2009-08-20 14 views
8

Mi clase tiene un campo de tipo Dictionary<string, List<string>>. ¿Cuál es la mejor manera de asignarlo con NHibernate? Será mejor que lo deje como un campo, no quiero exponerlo.NHibernate: mapeo de un diccionario de listas

¡Muchas gracias!

ulu

Respuesta

7

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

fantástico, voy a dar una oportunidad! – ulu

+1

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

+0

También, los documentos dicen, "Los elementos compuestos pueden contener componentes pero no colecciones". – ulu

Cuestiones relacionadas