2011-04-01 29 views
5

Para la asignación de colecciones en NHibernate con colecciones ordenadas como listas, se debe mapear un campo de columna de índice. Me acabo de dar cuenta de que, a partir de NHibernate 2.0, también parece haber una propiedad de "índice de lista", que (creo) puede usarse en lugar del índice.Cuál es la diferencia entre 'índice' e 'índice de lista'

Además de ser capaz de especificar un valor de índice base con "índice de lista", ¿hay alguna diferencia entre los dos? ¿Alguna ventaja al usar un VS el otro?

Respuesta

3

que tenían la misma pregunta y leer el código. He encontrado el siguiente:

(NH 3.0, cfg \ Colección Binder.cs, # 548)

private void BindCollectionIndex(/*...*/) 
{ 
    // ... 

    if (listMapping.ListIndex != null) 
    { 
     iv = new SimpleValue(model.CollectionTable); 
     new ValuePropertyBinder(iv, Mappings).BindSimpleValue(
      listMapping.ListIndex, 
      IndexedCollection.DefaultIndexColumnName, 
      model.IsOneToMany); 
    } 
    else if (listMapping.Index != null) 
    { 
     iv = new SimpleValue(model.CollectionTable); 
     listMapping.Index.type = NHibernateUtil.Int32.Name; 
     new ValuePropertyBinder(iv, Mappings).BindSimpleValue(
      listMapping.Index, 
      IndexedCollection.DefaultIndexColumnName, 
      model.IsOneToMany); 
    } 
    // ... 
} 

Lo que significa para mí:

  • Se trata básicamente de la misma.
  • list-index sobrescribe index
  • El tipo de la index se establece en int. Por lo tanto, tenía que comprobar lo que sucede realmente cuando utiliza otro tipo en el archivo de mapeo.
  • list-index admite base para indicarle qué índice debe iniciarse. (Esto se encuentra en otro lugar)
0

Al observar el XSD, puedo decir index permite especificar un múltiplo columnstype y, por lo que probablemente se puede utilizar con tipos personalizados (no he probado)

Cuestiones relacionadas