NHibernate
Az NHibernate egy objektum-relációs leképezÅ‘ (ORM) megoldás Microsoft .NET platformhoz: keretrendszert biztosÃt objektumorientált alap modellrÅ‘l hagyományos relációs adatmodellre való leképzéshez. A célja az, hogy levegye a programozó válláról a perzisztencia megvalósÃtás terhének jelentÅ‘s részét. Az NHibernate egy ingyenes szoftver, amely nyÃlt forrás kódú is, a GNU Lesser General Public License licencelt. Az NHibernate a közkedvelt Java O/R leképzÅ‘ Hibernate szoftver pótlásaként keletkezett .NET platformra. Képességek összefoglalásaAz NHibernate fÅ‘ funkcionalitása az, hogy a .Net osztályokat képes leképezni adatbázis táblákra (azaz CLR adat tÃpusokból SQL adat tÃpusokra tud leképezni). Az NHibernate nyújt szolgáltatásokat az adatok visszanyeréséhez is. Az NHibernate generálja az SQL lekérdezéseket, és megkÃméli a fejlesztÅ‘t azok elkészÃtésétÅ‘l, úgy hogy a kód a lehetÅ‘ legszélesebb skálán használható legyen az SQL szolgáltatók számára, az adatbázis portolhatóság megtartása és lehetÅ‘ legkisebb teljesÃtmény többlet költség mellett. Az NHibernate átlátszó perzisztenciát nyújt a normál CLR objektumok számára ("Jó öreg CLR Objektumok", POCO-k). Az egyetlen szigorú megkötés az osztály számára a paraméter nélküli konstruktor megléte, amely nem szükséges, hogy public elérési módosÃtóval legyen ellátva. (Egyes megoldások megfelelÅ‘ működése különös figyelmet igényel az Equals() és a GetHashCode() metódusok megvalósÃtását illetÅ‘en.[1]) TörténeteAz NHibernate megvalósÃtását Tom Barrett kezdte el, késÅ‘bb Mike Doerfler és Peter Smulovics vette át a fejlesztését. Jelenleg Fabio Maulo a projekt vezetÅ‘je. 2005 végén, a JBoss Inc.-es (jelenleg a Red Hat része) Sergey Koshcheyev örökölte, és vezette tovább az NHibernate fejlesztéseket teljes munkaidÅ‘ben.[2] 2006 végén a JBoss leállÃtotta a projekt támogatását; jelenleg teljes egészében közösség viszi tovább a projekt fejlesztését. Az 1.0 verzió inkább a Hibernate 2.1-es verziójának képességeit tükrözte, mint a Hibernate 3-asét, amibÅ‘l minimálisat valósÃtott meg. Az NHibernate 1.2.1-et 2007 novemberében adták ki, még több Hibernate 3-as képesség felvonultatásával, és .NET 2.0 támogatással, tárolt eljárások, generikus tÃpusok, és nullable tÃpusok támogatásával. Az NHibernate 2.0-et 2008. augusztus 23-án adták ki, a Hibernate 3.2 képességeinek szolgáltatásával. Az NHibernate 2.0-s kiadása feladta a .NET 1.1.-es támogatást.[3] Az NHibernate 2.1 2009. július 17-én látott napvilágot. Az NHibernate 3.0-et 2010. december 4-én adták ki, és az elsÅ‘ olyan verzió volt, amely .Net 3.5-ös verzióját támogatja. Bevezette a beépÃtett LINQ támogatást és egy erÅ‘sen tÃpusos feltétel-szerű API-t QueryOver néven, új AST-alapú értelmezÅ‘t az NHibernate HQL (Hibernate Query Language) motorhoz, ami támogatja az oszlopok lusta betöltését. Az NHibernate 3.2-t 2011 áprilisában adták ki. Az NHibernate 3.3-t 2012. április 24-én adták ki. Újdonságok a NHibernate 3.2-ben[4]
Újdonságok a NHibernate 3.3-ban[5]
FejlesztésekNyÃlt forrású szoftverként az NHibernate-hez rengetegen hozzájárulást kapott a közösségtÅ‘l. Ezek legtöbbje direkt belsÅ‘ funkcióként került be a szoftverbe, a többit a felhasználók eszközökben és dokumentációkként szolgáltatták. A LINQ implementáció lehetÅ‘vé tette a nyelvbe épÃtett lekérdezések NHibernate-es alkalmazását.[6] PéldaAz alábbi kódrészlet hozzáad egy objektumot az adatbázishoz, illetve vissza nyeri azt, módosÃt és frissÃt egy objektumot az NHibernate használatával. //Hozzá ad egy Customer-t (vásárló) az adattárolóhoz
//'sessionFactory' egy szálbiztos objektum amely egyszer fordul az alkalmazás élettartama alatt (eltarthat pá másodpercig)
//a konfigurációs fájlok alapján amelyek a táblák C# objektumokká történő leképzését határozzák meg
//(értsd, mely tulajdonságok mely oszlopokká kerülnek leképzésre)
//
//'session' nem szálbiztos, gyorsan lekérhető és egy adatbázis kapcsolatként tekinthetünk rá
using (var session = sessionFactory.OpenSession())
{
//a tranzakció egy db adatátvitelt felügyel
using (ITransaction transaction = session.BeginTransaction())
{
//Az alábbi sor hozzáadja a customert az NHibernate objektum listájához, hogy az adatbázisba illessze azt,
//de az az SQL insert parancs még ekkor nem kerül végrehajtásra*.
//*ha a Id-t az adatbázis generálja (értsd automatikusan növelt szám az oszlop tÃpusa)
//akkor az NHibernate le fogja futtatni az SQL INSERT-et amikor a .Save meghÃvásra kerül
session.Save(new Customer { Id = Guid.NewGuid(), FirstName = "Bill", Age = 50 });
//Az alábbi utasÃtás lefuttatja az SQL INSERT-et és véglegesÃti a tranzakciót a hÃvással
transaction.Commit();
}
}
//Visszanyeri a Customer-t a db-bÅ‘l, megváltoztatja a bejegyzést és frissÃti az adatbázisban
using (var session = sessionFactory.OpenSession())
using (ITransaction transaction = session.BeginTransaction())
{
//a session lekérdezése egy IQueryable<Customer>-el tér vissza. (megj.: a LINQ kollekciókkal dolgozik)
//csak a .FirstOrDefault hÃvásakor futtatja az NHibernate az SQL lekérdezést
Customer customer = session.Query<Customer>().Where(c => c.Token == token ).FirstOrDefault();
//Most már a Customer része a 'session' objektumnak és a NHibernate figyel a rajta végrehajtott változtatásokra
//tegyük hát meg
if( customer != null )
{
//egy tulajdonság megváltoztatása nem okoz SQL lekérdezést
customer.TokenVerified = true;
//A tranzakció véglegesÃtése egy SQL UPDATE utasÃtás végrehajtását eredményezi
//NHibernate követi a 'customer' változásait a betöltése óta
transaction.Commit();
}
}
MegjegyzendÅ‘, hogy NHibernate beállÃtásain múlik, hogy az NHibernate mikor futtatja az SQL utasÃtásokat. Kapcsolódó szócikkekJegyzetek
Ajánlott könyvek
Külső hivatkozások
FordÃtásEz a szócikk részben vagy egészben a NHibernate cÃmű angol Wikipédia-szócikk ezen változatának fordÃtásán alapul. Az eredeti cikk szerkesztÅ‘it annak laptörténete sorolja fel. Ez a jelzés csupán a megfogalmazás eredetét és a szerzÅ‘i jogokat jelzi, nem szolgál a cikkben szereplÅ‘ információk forrásmegjelöléseként. |