Lutz-IT GmbH - Ihr Partner für IT-Consulting und Programmierung
  • Email
  • Rss
Tel: +41 76 459 0580
  • IT-Consulting
  • Programmierung
  • Showcases
  • Blog
  • Referenzen
  • Auszeichnungen
  • Kontakt
Search the site...
Home» Programmierung » Elegante und Effiziente Data Access Layer mit Dapper.NET

Elegante und Effiziente Data Access Layer mit Dapper.NET

Posted by Benjamin Lutz - 7. April 2012 - Programmierung
0

Benjamin Lutz - Tips für Erfolg im ConsultingLetztens musste ich eine persönliche Niederlage einstecken. Normalerweise ist ein handgeschriebener Data Acces Layer,
welcher mit ADO.NET Sql-Statements auf einer Datenbank ausführt und das Resultset über einen DbDataReader abruft extrem schnell und die meisten ORMs können sich damit unter Performanceaspekten nicht messen. Die Betonung liegt auf “normalerweise”. Letzte Woche wurde ich von einem meiner Kollegen eines Besseren belehrt.

Der manuell geschriebene Code hat zuerst alle Ordinals zu den Spaltennamen ermittelt, damit dies beim Abruf der Datensätze nicht bei jeder Zeile implizit gemacht werden muss wie es beim direkten Zugriff mit Spaltennamen der Fall wäre. Gerade bei Resultsets mit vielen Spalten kommt dabei ein recht uneleganter Code heraus.

Mein Kollege hat den Versuch gestartet und die handgeschriebe Implementierung gegen den leichtgewichtigen ORM “Dapper.NET” von StackOverflow ersetzt. Der Code wurde so von etwa 60 Zeilen auf eine Zeile reduziert.

Der neue Code sieht nun wie im Beispiel auf der Dapper.NET Seite aus:

var dogList = connection.Query<Dog>("select Age = @Age, Id = @Id", new { Age = (int?)null, Id = Guid.NewGuid() });

Über eine anonyme Klasse werden die Parameter auf sehr elegante Weise deklariert. Der Typ, in den die Datensätze gemappt werden sollen, wird als generischer Parameter angegeben.

Die Lösung hat mir auf Anhieb richtig gut gefallen. Aber was glauben Sie was mein erster Einwand war? An dieser Stelle kommt es auf Performance an und ich konnte mir nicht vorstellen, dass dieser generische, elegante Ansatz meinen handgeschriebenen Code in dieser Disziplin schlagen konnte.

Mein Kollege und ich haben uns also zusammengesetzt und jeweils drei Performance-Messungen mit der alten und mit der neuen Implementierung gemacht. Das Resultset war etwa 750 Zeilen mit 30 Spalten gross. Das Ergebnis konnte ich zuerst nicht glauben. Mein Code war ganze 20 Millisekunden langsamer als die Dapper Implementierung.

Ein Blick hinter die Kullisen erklärt das Phänomen jedoch:

Die Dapper.NET Implementierung ist bis ins Detail getunt. Die hohe Performance wird durch dynamisch kompilierte, an die Daten angepasste, Methoden erreicht. Auch über die Code-Qualität muss man sich keine Sorgen machen, da genau dieses Stück Code bei StackOverflow in Produktion läuft und täglich hunderttausende Anfragen bearbeitet.

Insgesamt hat mich diese Implementierung restlos begeistert und ich bin mir sicher, dass mir dieses geniale Stück Code noch in vielen Projekten gute Dienste leisten wird.

Den Source-Code sowie einige Beispiele finden Sie unter: http://code.google.com/p/dapper-dot-net/

Data Access Layer, Datenbank, Mapper, ORM, Programmierung, SQL
0 comments
  Livefyre
  • Get Livefyre
  • FAQ
Sign in
+ Follow
Post comment
 
Link
Newest | Oldest

Neueste Artikel

  • Windows Service Installation Simplified

    17. Juni 2013
  • Generieren eines Software Architektur Dokuments mit Enterprise Architect

    21. Mai 2013
  • .NET 4.5 Trading API für Interactive Brokers

    6. Mai 2013
  • Windows 8.1 jetzt doch wieder mit Start Menü?

    29. April 2013
  • WCF Service Discovery mit .NET 4

    12. April 2013

    Artikel Archiv

    • [+] 2013 (15)
      • [+] Juni (1)
        • Windows Service Installation Simplified
      • [+] Mai (2)
        • Generieren eines Software Architektur Dokuments mit Enterprise Architect
        • .NET 4.5 Trading API für Interactive Brokers
      • [+] April (3)
        • Windows 8.1 jetzt doch wieder mit Start Menü?
        • WCF Service Discovery mit .NET 4
        • Hackerangriff auf Blog durch SQL-Injection
      • [+] März (3)
        • Distributed Event Aggregator bzw. ServiceBus simplified
        • Aspekt orientierte Programmierung (AOP)
        • Testautomatisierung mit Unittests und Moq
      • [+] Februar (2)
        • Unleash the power of Domain-Specific Language in VS2012
        • Benutzeroberflächen ergonomisch gestalten
      • [+] Januar (4)
        • Trend Trading System App für Windows 8 verfügbar
        • Erfahrungsbericht: Domain Oriented N-Layered von Microsoft Spain
        • Kommunikationsszenarien mit NServiceBus 3.3
        • HTML5 Anwendung als WinRT Application veröffentlichen
    • [+] 2012 (28)
      • [+] Dezember (1)
        • DataBinding und das MVVM-Pattern in HTML5
      • [+] November (2)
        • Der Unterschied zwischen Sieger- und Verlierertypen
        • Tücken bei der Personalbeschaffung von .NET Entwicklern
      • [+] Oktober (2)
        • Kostenloser Kursdaten REST-Service
        • Migration von .NET 4 Projekten nach WinRT (JS)
      • [+] September (2)
        • Migration von .NET 4 Projekten nach WinRT (XAML)
        • Windows 8 im Praxistest
      • [+] August (1)
        • Eigene Sections in der .NET Standard Konfiguration
      • [+] Juli (2)
        • Steigerung des Marktwerts durch Weiterbildung
        • Effiziente Kostenstrukturen im IT-Consulting - Teil 4
      • [+] Juni (1)
        • Effiziente Kostenstrukturen im IT-Consulting - Teil 3
      • [+] Mai (3)
        • Effiziente Kostenstrukturen im IT-Consulting - Teil 2
        • Effiziente Kostenstrukturen im IT-Consulting - Teil 1
        • Vision eines Entwicklerarbeitsplatzes in der Zukunft
      • [+] April (3)
        • Windows 8 und die Zukunft von Silverlight und WinRT
        • Elegante und Effiziente Data Access Layer mit Dapper.NET
        • Quartalsergebnis Q1/2012 des Trendfolge-Handelssystems
      • [+] März (3)
        • Konfiguration von WCF Services in Silverlight
        • Rapid GUI Prototyping mit Mockups
        • Chancen und Risiken des Entity Frameworks
      • [+] Februar (3)
        • Vorsicht vor Recruiter aus Grossbritannien
        • Financial Chart für Silverlight und WPF
        • Erste Handelssignale 2012
      • [+] Januar (5)
        • Microsoft Silverlight 5 endlich verfügbar
        • Riskmanagement in IT-Projekten
        • Artikelempfehlung: "Schluss mit dem Burnout-Gejammer!"
        • Ursachen von hoher Fluktuation in IT-Projekten
        • Einsatzgebiete von Silverlight5 und HTML5
    • [+] 2011 (36)
      • [+] Dezember (4)
        • Business Objekt Modelle in Entwicklungsprojekten
        • Einsatz von Open Source in Entwicklungsprojekten
        • Buchempfehlung: "Ich weiss, wie du tickst" ISBN 3280054109
        • Prozessverbesserungen für qualitativ hochwertigen Code
      • [+] November (2)
        • Deklarative .NET Programmierung mit Attributen
        • Favorisierte Lösung für Silverlight Reporting
      • [+] Oktober (3)
        • Silverlight Reportinglösungen
        • Testautomatisierung mit Silverlight
        • .NET Schlüsseltechnologien der nächsten Jahre
      • [+] September (4)
        • Hauptgründe für das Scheitern von IT-Projekten
        • Auswahl der Titel für das Handelssystem
        • WebClient Sicherheitsrichtlinien in Silverlight
        • Nachhaltiger Erfolg im Consulting Teil 7 - Projektdauer
      • [+] August (4)
        • Nachhaltiger Erfolg im Consulting Teil 6 - Vertragsverhandlungen
        • Nachhaltiger Erfolg im Consulting Teil 5 - Vorstellungsgespräch
        • Nachhaltiger Erfolg im Consulting Teil 4 - Stundensatzverhandlungen
        • Nachhaltiger Erfolg im Consulting Teil 3 - Bewerbungsmanagement
      • [+] Juli (4)
        • Nachhaltiger Erfolg im Consulting Teil 2 – Onlineportale
        • Nachhaltiger Erfolg im Consulting Teil 1 - Das Profil
        • Integration von Windows Forms Controls in WPF
        • Unittesten von WCF-Services mit der ServiceHost Klasse
      • [+] Juni (4)
        • Verteilte Transaktionen in einer Service orientierten Architektur
        • Service orientierte Architektur und Domain Driven Design
        • View und ViewModel mit MEF unter testbarkeits Aspekten verbinden
        • Entfernung ungenutzter Strings in .NET Resource-Files
      • [+] Mai (5)
        • Enterprise Library Silverlight Integration Pack Validation Block Teil II
        • Enterprise Library Silverlight Integration Pack Validation Block Teil I
        • Programmierung von Streaming Services mit WCF und Silverlight
        • Order Statemachine mit Workflow Foundation 4
        • Memory leaks bei eventbasierten Architekturen
      • [+] April (5)
        • Linq Expressions in der Praxis
        • Handelsregeln mit der .NET Rule Engine umsetzen Teil II
        • Handelsregeln mit der .NET Rule Engine umsetzen Teil I
        • Plugin Mechanismus für Trading Systeme
        • Charttechnik mit .NET
      • [+] März (1)
        • Schaffen der Grundlagen für ein eigenes Handelssystem
    © 2013 Lutz-IT GmbH