Én és az NHibernate nevű állatka....

...ami nem túl nagy, nem túl szőrös és nem is túl büdös a szája, de mégis egy csomó bajom van vele.
Pedig jó kis lib az az Hibernate csak a .NET-es port egy kicsit érdekesre sikerült.

A .NET alá a Hibernate Core 2.1 lett áttéve (a mostani Hibernate Core már a 3.1-nél tart), annak minden hiányosságával.

Az első dolog, amibe belefutottam, hogy többes-a-többes (szép magyar fordítása a many-to-many-nek :-)) entitás kapcsolatot nem lehet indexelten kezelni vele, tehát nem mappelhető be egy IDictionary<,> kollekcióba.... Na, de sebaj, ezt még áthidaltam egy származtatott jellemzővel.

Aztán a .NET-ben az "is" operátor nem működik lustán (lazy="true") mappelt entitásokra, a proxyzás miatt. A valami.GetType() a valami példányhoz generált proxy típusát adja vissza, természetesen, tehát csak a proxy nélküli megoldás működik.

Aztán máma olvasgttam a doksit, és van benne egy olyan rész, hogy ha a session példány dob egy egy kivételt, akkor adott esetben inkonzisztens állapotba kerülhet, emiatt el kell dobni az egész sesssiont, tranzakcióstul, mindenestül. Persze vele mennek a cache-elt entity példányok is... :-/

De vajon ha az ADO réteg dob egy kivételt, akkor sem tudom tovább használni a sessiont? Vagy csak ha maga az session dobja? A doksi csak annyit állít, hogy a session becsomagolja nejem az ADOExceptiont egy másik kivételbe.

Na, akkor most mire számítsak? Ha azt veszem, akkor azt mondja, hogy csak ha a session dobja...

Nem tom, pedig fontos lenne tudni, mivel éppen egy egész alkalmazást tolok át éppen NHibernate alá és ott nagyon nem mindegy a dolog.... Na, de majd kiderül...