开发者

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

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 ad开发者_JS百科vantage to using one VS the other?


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)


By looking at the XSD, I can tell index supports specifying a type and multiple columns, so it can probably be used with custom types (I haven't tried)

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜