Set, Bag, List az NHibernate -ben
Set, Bag, List az NHibernate -ben
Alapvető kérdés, hogy mikor milyen típust érdemes definiálni a kollekciók letöltésénél az NHibernate -ben.
A három lehetséges versenyző: Set, Bag, List
No de miben különböznek egymástól, mikor mit érdemes használni?
Set: rendezés mentes kollekció, az indexeket nem lehet használni, minden tétele egyedi. Duplikáció nem lehetséges a tételek között! A GetHashCode és az Equals függvényeket felül kell definiálni (override) és le kell kezelni az esetleges duplikációkat! A rendezése csak az OrderBy -al, vagy egy előre definiált SortedSet segítségével lehetséges. A Set használata akkor ajánlott, hogyha a visszatérő kollekcióban biztosan egyedi tételek vannak, és kizárt a duplikálódás! Az NHibernate a kollekció visszatérésére az Iesi.Collection.ISet interface -t használja. A mapping XML -ben <set> -el kell definiálni.
Bag: rendezetlen lista, ahol megengedett a duplikálódás. A .NET IList -jét használja, azaz IList -ben adja vissza az adatokat az NHibernate -t. A Bag -et néha nevezik Multiset -nek is, a duplikálódó tételei miatt. Az index oszlopát az NHibernate nem használja és nem illeszti, így a keresés indexek alapján nem lehetséges! A mapping XML -ben <set> -el kell definiálni.
List: rendezett lista, a duplikálódás engedélyezve van. Az index oszlopot az NHibernate -ben illeszteni kell a megfelelő index mezőhöz. A kollekciót a .NET szabványos IList -en keresztül adja vissza. A mapping XML -ben <list> -el kell definiálni.
Lehetőség van még a< map>, <array> és <primitive-array> definiálására is, amire most nem térek ki… 🙂