<?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; NHibernate</title>
	<atom:link href="http://blog.larshildebrandt.de/category/programmieren/net/nhibernate/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 mit abgeleiteten Klassen</title>
		<link>http://blog.larshildebrandt.de/fluent-nhibernate-inheritance/113.html</link>
		<comments>http://blog.larshildebrandt.de/fluent-nhibernate-inheritance/113.html#comments</comments>
		<pubDate>Thu, 19 Mar 2009 10:17:57 +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[ORM]]></category>

		<guid isPermaLink="false">http://blog.larshildebrandt.de/?p=113</guid>
		<description><![CDATA[Gestern Abend habe ich mich mal wieder ein wenig mit Fluent NHibernate beschäftigt. Mein Ziel war es, eine Objektstruktur, die aus einer Basisklasse und zwei abgeleiteten Klassen besteht mittels Fluent NHibernate zu speichern. Nach einigem Fehlversuchen bin ich dann zu folgendem Ergebnis gekommen: public class KontaktMap : ClassMap&#60;Kontakt&#62; &#123; public KontaktMap&#40;&#41; &#123; Id&#40;x =&#62; x.KontaktId&#41; [...]]]></description>
			<content:encoded><![CDATA[<p>Gestern Abend habe ich mich mal wieder ein wenig mit Fluent NHibernate beschäftigt. Mein Ziel war es, eine Objektstruktur, die aus einer Basisklasse und zwei abgeleiteten Klassen besteht mittels Fluent NHibernate zu speichern.<br />
<img src="http://blog.larshildebrandt.de/wp-content/uploads/2009/03/20090319_fluentnhibernateinheritance.jpg" alt="" title="Objektmodell" width="430" height="325" class="alignleft size-full wp-image-114" /></p>
<p>Nach einigem Fehlversuchen bin ich dann zu folgendem Ergebnis gekommen:</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> KontaktMap <span style="color: #008000;">:</span> ClassMap<span style="color: #008000;">&lt;</span>Kontakt<span style="color: #008000;">&gt;</span>
    <span style="color: #008000;">&#123;</span>
        <span style="color: #0600FF; font-weight: bold;">public</span> KontaktMap<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;">KontaktId</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;">KontaktPerson</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            JoinedSubClass<span style="color: #008000;">&lt;</span>Brief<span style="color: #008000;">&gt;</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;KontaktId&quot;</span>, MapBrief<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            JoinedSubClass<span style="color: #008000;">&lt;</span>Anruf<span style="color: #008000;">&gt;</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;KontaktId&quot;</span>, MapAnruf<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #008000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #0600FF; font-weight: bold;">static</span> <span style="color: #6666cc; font-weight: bold;">void</span> MapBrief<span style="color: #008000;">&#40;</span>JoinedSubClassPart<span style="color: #008000;">&lt;</span>Brief<span style="color: #008000;">&gt;</span> part<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            part<span style="color: #008000;">.</span><span style="color: #0000FF;">Map</span><span style="color: #008000;">&#40;</span>x <span style="color: #008000;">=&gt;</span> x<span style="color: #008000;">.</span><span style="color: #0000FF;">Absender</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            part<span style="color: #008000;">.</span><span style="color: #0000FF;">Map</span><span style="color: #008000;">&#40;</span>x <span style="color: #008000;">=&gt;</span> x<span style="color: #008000;">.</span><span style="color: #0000FF;">Text</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #008000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #0600FF; font-weight: bold;">static</span> <span style="color: #6666cc; font-weight: bold;">void</span> MapAnruf<span style="color: #008000;">&#40;</span>JoinedSubClassPart<span style="color: #008000;">&lt;</span>Anruf<span style="color: #008000;">&gt;</span> part<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            part<span style="color: #008000;">.</span><span style="color: #0000FF;">Map</span><span style="color: #008000;">&#40;</span>x <span style="color: #008000;">=&gt;</span> x<span style="color: #008000;">.</span><span style="color: #0000FF;">Telefonnummer</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            part<span style="color: #008000;">.</span><span style="color: #0000FF;">Map</span><span style="color: #008000;">&#40;</span>x <span style="color: #008000;">=&gt;</span> x<span style="color: #008000;">.</span><span style="color: #0000FF;">Bemerkung</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>Hier das vollständige Beispiel: <a href='http://blog.larshildebrandt.de/wp-content/uploads/2009/03/20090319_fluentnhibernateinheritance.zip'>Download</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.larshildebrandt.de/fluent-nhibernate-inheritance/113.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<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>

