Diese quelloffene Bibliothek stellt eine Reihe von Erweiterungsmethoden für die IDbConnection-Schnittstelle bereit und nutzt selbst die Bezeichnung Micro-ORM. Sie ist von und für StackOverflow entwickelt worden.
Da Dapper auf ADO.NET aufsetzt, wird die Verbindung zur Datenbank exakt gleich hergestellt.
Für den Aufbau einer Verbindung mit einer Datenquelle wird eine dem Datenanbieter entsprechendes DbConnection-Objekt erzeugt. Beim Erzeugen der Instanz wird ebenfalls die Verbindungszeichenfolge als Parameterwert übergeben. Durch die Objektmethode Open() wird die Verbindung dann geöffnet.
Wichtig ist alle nicht mehr notwendigen offenen Verbindungen zu schließen, sodass keine Resourcen vom Host der Datenquelle verschwendet werden. Zum Schließen der Verbindung kann die Instanzmethode Close() verwendet werden. Im unten aufgeführten Beispiel ist dies aber nicht notwendig, da der Garbage-Collector über das Schlüsselwort using angewiesen wird, das Verbindungsobjekt ordnungsgemäß zu schließen und den besetzten Speicher wieder frei zu geben.
using IDbConnection connection = new SqlConnection(connectionString);
connection.Open();
Datensätze abrufen
Beim Abrufen der Datensätze kommt die eigentliche Magie hinter Dapper zum Vorschein. Statt einzeln Wert für Wert auszulesen, wird die Query()-Methode verwendet, um die ausgelesenen Werte direkt einer Auflistung von Objekten eines angegebenen Typs zuzuordnen. Der Methode Query() wird dabei die auszuführende SELECT-Anweisung übergeben.
Anschließend wird nurnoch mit der Auflistung von Objekten weitergearbeitet.
IEnumerable<MyObject> myObjects = connection.Query<MyObject>("SELECT * FROM MyTable");
foreach (MyObject myObject in myObjects)
{
}
Anweisung ausführen
Jetzt lassen sich auch Anweisungen ausführen, wobei ebenfalls die Anzahl der betroffenen Zeilen zurückgegeben wird:
int rowsAffected = connection.Execute(sql);
Anweisung ausführen
Über anonyme Typen können Parameter an die SQL-Anweisung übergeben werden:
connection.Execute("INSERT INTO Task(Title, Completed) VALUES (@Title, False, @Priority)", new { Title = title, Priority = priority });