Mindennapi gondolatmorzsák

Képek-, gondolatok-, és minden más!

Hit enter after type your search item
Mindennapi gondolatmorzsák

Képek-, gondolatok-, és minden más!

NHibernate mapping by code

kga
You are Reading..

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á:

<br />
&lt;?xml version='1.0' encoding='utf-8' ?&gt;<br />
&lt;hibernate-mapping xmlns='urn:nhibernate-mapping-2.2' assembly=&quot;Example&quot; namespace='Example'&gt;<br />
&lt;class name='User' table='user' dynamic-update='true' dynamic-insert='true' &gt;<br />
 &lt;id name='Id' column=&quot;Id&quot; &gt;<br />
  &lt;generator class='hilo'&gt;<br />
   &lt;param name='table'&gt;globalid&lt;/param&gt;<br />
   &lt;param name='column'&gt;Id&lt;/param&gt;<br />
   &lt;param name='max_lo'&gt;0&lt;/param&gt;<br />
  &lt;/generator&gt;<br />
 &lt;/id&gt;<br />
 &lt;property name='Password' column=&quot;Password&quot; /&gt;<br />
 &lt;property name='Name' column=&quot;Name&quot; /&gt;<br />
 &lt;property name='Mothername' column=&quot;Mothername&quot; /&gt;<br />
 &lt;property name='Bornname' column=&quot;Bornname&quot; /&gt;<br />
 &lt;property name='Borndate' column=&quot;Borndate&quot; /&gt;<br />
 &lt;property name='Taj' column=&quot;Taj&quot; /&gt;<br />
 &lt;property name='Vatnumber' column=&quot;Vatnumber&quot; /&gt;<br />
 &lt;property name='Addresscardno' column=&quot;Addresscardno&quot; /&gt;<br />
 &lt;property name='Archived' column=&quot;Archived&quot; /&gt;<br />
 &lt;property name='Username' column=&quot;Username&quot; /&gt;<br />
 &lt;property name='Serial' column=&quot;Serial&quot; /&gt;<br />
 &lt;property name='External' column=&quot;External&quot; /&gt;<br />
&lt;/class&gt;<br />
&lt;/hibernate-mapping&gt;<br />


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!

<br />
public virtual ModelMapper Mapping()<br />
{<br />
var mapper = new ModelMapper();<br />
mapper.Class&lt;User&gt;(<br />
ca =&gt;<br />
 {<br />
  ca.EntityName(this.GetType().ToString());<br />
  ca.Table(&quot;user&quot;);<br />
  ca.DynamicUpdate(true);<br />
  ca.DynamicInsert(true);<br />
  ca.Id(x =&gt; x.Id, map =&gt;<br />
  {<br />
   map.Column(&quot;Id&quot;);<br />
   map.Generator(Generators.HighLow, gmap =&gt; gmap.Params(new { max_low = 0 }));<br />
   });<br />
   ca.Property(x =&gt; x.Password, map =&gt; map.Column(&quot;Password&quot;));<br />
   ca.Property(x =&gt; x.Name, map =&gt; map.Column(&quot;Name&quot;));<br />
   ca.Property(x =&gt; x.Mothername, map =&gt; map.Column(&quot;Mothername&quot;));<br />
   ca.Property(x =&gt; x.Bornname, map =&gt; map.Column(&quot;Bornname&quot;));<br />
   ca.Property(x =&gt; x.Borndate, map =&gt; map.Column(&quot;Borndate&quot;));<br />
   ca.Property(x =&gt; x.Taj, map =&gt; map.Column(&quot;Taj&quot;));<br />
   ca.Property(x =&gt; x.Vatnumber, map =&gt; map.Column(&quot;Vatnumber&quot;));<br />
   ca.Property(x =&gt; x.Addresscardno, map =&gt; map.Column(&quot;Addresscardno&quot;));<br />
   ca.Property(x =&gt; x.Username, map =&gt; map.Column(&quot;Username&quot;));<br />
   mapper.AddMappings(typeof(User).Assembly.GetTypes());<br />
   return mapper;<br />
}<br />

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!