Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the difference between 'index' and 'list-index'

Tags:

nhibernate

For collection mapping in NHibernate with ordered collections such as lists, an index column field must be mapped. I just noticed that, as of NHibernate 2.0, there appears to be a "list-index" property as well, which (I believe) can be used in the place of index.

Asides from being able to specify a base index value with "list-index", is there a difference between the two? Any advantage to using one VS the other?

like image 557
Remi Despres-Smyth Avatar asked Oct 12 '22 09:10

Remi Despres-Smyth


1 Answers

I had the same question and read the code. I found the following:

(NH 3.0, Cfg\Collection 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);
    }
    // ...
}

Which means to me:

  • It is basically the same.
  • list-index overwrites index
  • The type of the index is set to int. So you had to check what actually happens when using another type in the mapping file.
  • list-index supports base to tell it on which index to start. (This is found somewhere else)
like image 175
Stefan Steinegger Avatar answered Nov 15 '22 10:11

Stefan Steinegger