ADO.NET Data Services mit NHibernate

by Gregor Biswanger 1. September 2009 11:19

Wie bereits beim Blog-Eintrag genannt wurde: „ADO.NET Data Services - Der REST Anbieter für Modelle“, können auch mit anderen O/R-Mapper oder Datenquellen als Model für die Data Services eingesetzt werden. Dieser Artikel soll Demonstrieren, wie einfach NHibernate verwendet werden kann. Vorkenntnisse über den bisherigen Artikel zu ADO.NET Data Services und NHibernate wären Voraussetzung.

Die Datenschicht

Beginnend bei der Datenschicht, wird NHibernate wie gewohnt eingesetzt. Dazu zählen die beiden Konfigurationsdateien hibernate.cfg.xml (Alle Hauptsächlichen Einstellungen wie der Data-Provider und Connection-String) und Customer.hbm.xml (Konfigurationsdatei zum Mappen der Entity Customer). Weil NHibernate´s wichtigsten Kernfunktionen wie ISessionFactory und ISession nicht Thread-Safe sind. Wird eine NHibernateHelper-Klasse geschrieben um mehrere Instancen verhindern zu können.

Abb.1.1. – Aufbau der Datenschicht.

Zu guter Letzt folgt die CustomerReposity-Klasse, die den direkten Zugriff auf die Customer in der Datenbank hat. Diese benötigt eine Statische-Methode, die ein Objekt zurück gibt, das von IQueryable ableitet, diese stellt Funktionen zur Auswertung von Abfragen für eine spezifische Datenquelle mit unbekanntem Datentyp bereit und kommt aus dem Namespace System.Linq. Passend dazu muss mittels Generics der Typ der Entity mitgegeben werden. Bei der Verwendung von LINQ-to-NHibernate kann nach der Abfrage das Ergebnis als Liste konvertiert werden, erst dann kann LINQ-to-NHibernate „richtig“ zu AsQueryable konvertieren. Eventuell ist das noch ein Bug von der LINQ-to-NHibernate Version 1.0.

Abb.1.2. – Source-Code von CustomerRepository.

Die DataService-Schicht

Für die DataService-Schicht wird nun eine Modell-Klasse zur Verfügung gestellt. Dieses Modell ist direkt mit dem CustomerRepository verbunden.

Abb.1.3. – Aufbau der DataService-Schicht.

Um Lesend die Daten von der Datenschicht zu erhalten, wird wiederholt eine Methode mit dem Rückgabeobjekt IQueryable geschrieben. Allerdings möchte man ja auch Daten schreiben oder ändern können. Dazu muss ein Interface mit IUpdatable dem Modell implementiert werden. Das Interface selbst hat einige Methoden, doch um nur die Aktualisierung der Daten zu ermöglichen langen die folgenden Methoden GetResource, SetValue und ResolveResource.

Abb.1.4. – Source-Code von CustomerModel.

Nun wird dem Data Service das CustomerModel zugewiesen.

Abb.1.5. – Dem Data Service „WebDataService“ das CustomerModel zuweisen.

Jetzt ist auch der ADO.NET Data Service mit NHibernate fertig. Beim Starten des Projekts kann nun alles mittels REST angesteuert werden. Auch das einbinden auf einem Client und ansteuern mittels LINQ ist nun möglich. Wie das funktioniert, wurde bereits unter diesem Artikel beschrieben: „LINQ-to-Data Service - LINQ den REST geben“.

Abb.1.6. – Der fertige Data-Service im Browser.

Fazit

Leider ist es natürlich nicht so elegant und schnell gelöst, als wäre dies mit dem Entity Framework zu Verfügung gestellt worden. Allerdings ist es auch nicht so komplex und schwierig. Meist wird ja mehr als ein REST Services benötigt und dann kann man „der Architektur zur Liebe“ ohne schlechtem Gewissen mit NHibernate arbeiten.



Wenn ihnen der Artikel gefallen hat oder er für sie hilfreich war, bitten "kicken" sie ihn.
kick it on dotnet-kicks.de

Kommentare

Powered by BlogEngine.NET 1.4.5.0
Theme by Extensive SEO

Über den Autor

Gregor Biswanger

Microsoft MVP für Client App Dev
XING

Gregor Biswanger (Microsoft MVP für Client App Dev) ist freier Consultant, Trainer, Autor und Speaker.


Seine Schwerpunkte liegen im Bereich der .NET-Architektur, agilen Prozessen und XAML. Er veröffentlichte vor kurzem seine DVD´s mit Video-Trainings zum Thema „Meine erste Windows 8 App“, „Windows Store Apps mit XAML und C#“ und „WPF 4.5 und Silverlight 5“ bei Addison-Wesley von video2brain.


Biswanger ist auch im Auftrag von Intel GmbH als Technologieberater für die Intel Developer Zone aktiv und ist Leader bei der Ingolstädter .NET Developers Group (INdotNET). 

 

Video über mich:
http://www.youtube.com/watch?v=mx_6SiiLxjk


Basta! 2011 Speaker

CLIPer

MCTS
Windows SharePoint Services 3.0 – Application Development (MCTS)