<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Lars Hildebrandt's Blog &#187; Mapping</title>
	<atom:link href="http://blog.larshildebrandt.de/tag/mapping/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.larshildebrandt.de</link>
	<description>übers Programmieren und mehr...</description>
	<lastBuildDate>Mon, 28 Nov 2011 21:11:36 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Fluent NHibernate</title>
		<link>http://blog.larshildebrandt.de/fluent-nhibernate/105.html</link>
		<comments>http://blog.larshildebrandt.de/fluent-nhibernate/105.html#comments</comments>
		<pubDate>Fri, 13 Mar 2009 14:42:23 +0000</pubDate>
		<dc:creator>Lars Hildebrandt</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[NHibernate]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[FluentNHibernate]]></category>
		<category><![CDATA[Mapping]]></category>
		<category><![CDATA[ORM]]></category>

		<guid isPermaLink="false">http://blog.larshildebrandt.de/?p=105</guid>
		<description><![CDATA[Habt ihr Euch auch schon einmal darüber geärgert, wieder diese unschönen XML-Dateien für das Mapping von NHibernate schreiben zu müssen? Seit kurzem gibt es gegen diese Unschönheit eine Lösung. Fluent NHibernate bietet Euch die Möglichkeit Eure Mappings &#8220;strongly typed&#8221; zu definieren. Anstatt der hbm.xml-Datei gibt es mit Fluent NHibernate eine Mapping-Klasse. Die Klasse Person mit [...]]]></description>
			<content:encoded><![CDATA[<p>Habt ihr Euch auch schon einmal darüber geärgert, wieder diese unschönen XML-Dateien für das Mapping von NHibernate schreiben zu müssen? Seit kurzem gibt es gegen diese Unschönheit eine Lösung. Fluent NHibernate bietet Euch die Möglichkeit Eure Mappings &#8220;strongly typed&#8221; zu definieren. Anstatt der hbm.xml-Datei gibt es mit Fluent NHibernate eine Mapping-Klasse.</p>
<p>Die Klasse Person mit einer Liste von Adressen</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;">    <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">class</span> Person
    <span style="color: #008000;">&#123;</span>
        <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #0600FF; font-weight: bold;">virtual</span> Guid PersonId <span style="color: #008000;">&#123;</span> get<span style="color: #008000;">;</span> set<span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span>
        <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #0600FF; font-weight: bold;">virtual</span> <span style="color: #6666cc; font-weight: bold;">string</span> Vorname <span style="color: #008000;">&#123;</span> get<span style="color: #008000;">;</span> set<span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span>
        <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #0600FF; font-weight: bold;">virtual</span> <span style="color: #6666cc; font-weight: bold;">string</span> Nachname <span style="color: #008000;">&#123;</span> get<span style="color: #008000;">;</span> set<span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span>
        <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #0600FF; font-weight: bold;">virtual</span> IList<span style="color: #008000;">&lt;</span>Adresse<span style="color: #008000;">&gt;</span> Adressen <span style="color: #008000;">&#123;</span> get<span style="color: #008000;">;</span> set<span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span>
    <span style="color: #008000;">&#125;</span></pre></div></div>

<p>kann dann wie folgt gemappt werden.</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;">    <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">class</span> PersonMap <span style="color: #008000;">:</span> ClassMap<span style="color: #008000;">&lt;</span>Person<span style="color: #008000;">&gt;</span>
    <span style="color: #008000;">&#123;</span>
        <span style="color: #0600FF; font-weight: bold;">public</span> PersonMap<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            Id<span style="color: #008000;">&#40;</span>x <span style="color: #008000;">=&gt;</span> x<span style="color: #008000;">.</span><span style="color: #0000FF;">PersonId</span><span style="color: #008000;">&#41;</span>
                <span style="color: #008000;">.</span><span style="color: #0000FF;">GeneratedBy</span>
                <span style="color: #008000;">.</span><span style="color: #0000FF;">GuidComb</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
                <span style="color: #008000;">.</span><span style="color: #0000FF;">WithUnsavedValue</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;00000000-0000-0000-0000-000000000000&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            Map<span style="color: #008000;">&#40;</span>x <span style="color: #008000;">=&gt;</span> x<span style="color: #008000;">.</span><span style="color: #0000FF;">Vorname</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">WithLengthOf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">50</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            Map<span style="color: #008000;">&#40;</span>x <span style="color: #008000;">=&gt;</span> x<span style="color: #008000;">.</span><span style="color: #0000FF;">Nachname</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">WithLengthOf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">50</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            HasMany<span style="color: #008000;">&lt;</span>Adresse<span style="color: #008000;">&gt;</span><span style="color: #008000;">&#40;</span>x <span style="color: #008000;">=&gt;</span> x<span style="color: #008000;">.</span><span style="color: #0000FF;">Adressen</span><span style="color: #008000;">&#41;</span>
                <span style="color: #008000;">.</span><span style="color: #0000FF;">Access</span><span style="color: #008000;">.</span><span style="color: #0000FF;">AsProperty</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
                <span style="color: #008000;">.</span><span style="color: #0000FF;">AsBag</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">WithKeyColumn</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;PersonId&quot;</span><span style="color: #008000;">&#41;</span>
                <span style="color: #008000;">.</span><span style="color: #0000FF;">Cascade</span><span style="color: #008000;">.</span><span style="color: #0000FF;">All</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #008000;">&#125;</span>
    <span style="color: #008000;">&#125;</span></pre></div></div>

<p>Aber welche Vorteile biete die Fluent-Variante?</p>
<p>1. Die XML-Mapping-Dateien können nicht vom Compiler geprüft werden. Fehlkonfigurationen fallen erst zu Laufzeit auf (Exception)<br />
2. Mapping-Klassen werden wie alle anderen Klassen vom Compiler geprüft. Fehler fallen zu Entwurfszeit auf.<br />
3. Beim Umbennen von Feldern in Klassen über die Refactoring-Möglichkeiten von Visual Studio bzw. Erweiterungen werden die Felder in den Mapping-Klassen ebenfalls umbenannt. Bei den XML-Mappings müsste das händisch gemacht werden.<br />
4. Fluent-Mappings sind deutlich kürzer bzw. deutlich besser lesbar.</p>
<p>Auch die Konfiguration von NHibernate kann über eine FluentVariante realisiert werden.</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;">    ISessionFactory sessionFactory <span style="color: #008000;">=</span> Fluently
        <span style="color: #008000;">.</span><span style="color: #0000FF;">Configure</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">.</span><span style="color: #0000FF;">Database</span><span style="color: #008000;">&#40;</span>SQLiteConfiguration<span style="color: #008000;">.</span><span style="color: #0000FF;">Standard</span><span style="color: #008000;">.</span><span style="color: #0000FF;">UsingFile</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Beispiel.db&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">.</span><span style="color: #0000FF;">Mappings</span><span style="color: #008000;">&#40;</span>m <span style="color: #008000;">=&gt;</span> m<span style="color: #008000;">.</span><span style="color: #0000FF;">FluentMappings</span><span style="color: #008000;">.</span><span style="color: #0000FF;">AddFromAssemblyOf</span><span style="color: #008000;">&lt;</span>Person<span style="color: #008000;">&gt;</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">.</span><span style="color: #0000FF;">BuildSessionFactory</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span></pre></div></div>

<p>Unter <a href="http://fluentnhibernate.org/" >http://fluentnhibernate.org/</a> kann man sich die aktuelle Version der NHibernate-Erweitung laden und mit der neuen XML-freien Variante von Mappings anfreunden. </p>
<p>Das komplette Beispiel gibt es <a href='http://blog.larshildebrandt.de/wp-content/uploads/2009/03/20090313_fluentnhibernate.zip'>hier</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.larshildebrandt.de/fluent-nhibernate/105.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

