NHibernate mapping by code
NHibernate mapping by code
Az NHibernate egyik gyerekbetegsége volt az, hogy a mapping -et, azaz az osztályok és az adatbázis tábláinak és mezőinek az összerendelését XML fájlokon kereszztül lehetett beállítani.
Mit is jelent ez?
Íme egy példa rá:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | <? xml version = '1.0' encoding = 'utf-8' ?> < hibernate-mapping xmlns = 'urn:nhibernate-mapping-2.2' assembly = "Example" namespace = 'Example' > < class name = 'User' table = 'user' dynamic-update = 'true' dynamic-insert = 'true' > < id name = 'Id' column = "Id" > < generator class = 'hilo' > < param name = 'table' >globalid</ param > < param name = 'column' >Id</ param > < param name = 'max_lo' >0</ param > </ generator > </ id > < property name = 'Password' column = "Password" /> < property name = 'Name' column = "Name" /> < property name = 'Mothername' column = "Mothername" /> < property name = 'Bornname' column = "Bornname" /> < property name = 'Borndate' column = "Borndate" /> < property name = 'Taj' column = "Taj" /> < property name = 'Vatnumber' column = "Vatnumber" /> < property name = 'Addresscardno' column = "Addresscardno" /> < property name = 'Archived' column = "Archived" /> < property name = 'Username' column = "Username" /> < property name = 'Serial' column = "Serial" /> < property name = 'External' column = "External" /> </ class > </ hibernate-mapping > |
Van egy táblánk, amelyben a felhasználó adatait tároljuk el. Ne foglalkozzunk most azzal, hogy a felhasználói táblának millió kapcsolódása van, mi csak arra vagyunk kiváncsiak, hogy milyen úton – módon lehet rábeszélni az NHibernate -et arra, hogy az osztály és a tábla között megtalálja a kapcsolatot.
Ez eléggé nehéz és áttekinthetetlen hogyha 15 mezőnél többet tartalmaz a tábla.
Az új NHibernate 3.2 egyik újítása (rögtön jegyezzük meg itt, hogy a Fluent NHibernate már ezt jóideje tudja), hogy a feltérképezést kódbol is el lehet végezni.
Mi kell hozzá?
Az NHibernate.Mapping.ByCode osztály, és egy kis ráérző képesség, semmi több!
Íme az előző példa, C# kódként!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | public virtual ModelMapper Mapping() { var mapper = new ModelMapper(); mapper.Class<User>( ca => { ca.EntityName( this .GetType().ToString()); ca.Table( "user" ); ca.DynamicUpdate( true ); ca.DynamicInsert( true ); ca.Id(x => x.Id, map => { map.Column( "Id" ); map.Generator(Generators.HighLow, gmap => gmap.Params( new { max_low = 0 })); }); ca.Property(x => x.Password, map => map.Column( "Password" )); ca.Property(x => x.Name, map => map.Column( "Name" )); ca.Property(x => x.Mothername, map => map.Column( "Mothername" )); ca.Property(x => x.Bornname, map => map.Column( "Bornname" )); ca.Property(x => x.Borndate, map => map.Column( "Borndate" )); ca.Property(x => x.Taj, map => map.Column( "Taj" )); ca.Property(x => x.Vatnumber, map => map.Column( "Vatnumber" )); ca.Property(x => x.Addresscardno, map => map.Column( "Addresscardno" )); ca.Property(x => x.Username, map => map.Column( "Username" )); mapper.AddMappings( typeof (User).Assembly.GetTypes()); return mapper; } |
Mennyivel átláthatóbb, nyomon követhetőbb, és nem utolsó sorban kisebb az esély az elírásra, mint az XML esetén, amit futásidőben dolgoz fel az NHibernate -t!