2011-04-01 17 views
5

Do mapowania kolekcji w NHibernate z zamówionymi kolekcjami, takimi jak listy, należy odwzorować pole kolumny indeksu. Właśnie zauważyłem, że jak z NHibernate 2.0, wydaje się, że istnieje również właściwość "list-index", która (jak sądzę) może być użyta w miejsce indeksu.Jaka jest różnica między "indeksem" a "indeksem listy"?

Oprócz możliwości określenia wartości indeksu bazowego za pomocą "indeksu listy", czy istnieje różnica między tymi dwoma? Jakieś korzyści z używania jednego VS w drugim?

Odpowiedz

3

Miałem to samo pytanie i przeczytać kod. Znalazłem następujące:

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

Co oznacza dla mnie:

  • To jest w zasadzie taka sama.
  • list-index nadpisuje index
  • Typem index jest ustawiony na int. Musiałeś więc sprawdzić, co faktycznie się dzieje, gdy używasz innego typu w pliku odwzorowania.
  • list-index obsługuje base, aby powiedzieć, na którym indeksie się uruchomić. (Jest to gdzieś indziej)
0

Patrząc na XSD, mogę powiedzieć index obsługuje określając type i wielokrotność columns, więc może prawdopodobnie być stosowane z typów niestandardowych (nie próbowałem)

Powiązane problemy