Verwendung des Dapper ORM in C #

Objektrelationale Mapper (ORMs) werden seit langem verwendet, um die Impedanzfehlanpassung zu beseitigen, die zwischen den Objektmodellen von Programmiersprachen und den Datenmodellen in relationalen Datenbanken besteht. Dapper ist ein Open Source, leichtes ORM, das vom Stack Overflow-Team entwickelt wurde. Dapper ist im Vergleich zu anderen ORMs vor allem wegen seines geringen Gewichts sehr schnell.

Dapper wurde mit Blick auf Leistung und Benutzerfreundlichkeit entwickelt. Es bietet Unterstützung für die statische und dynamische Objektbindung mithilfe von Transaktionen, gespeicherten Prozeduren oder Masseneinfügungen von Daten.

Installieren Sie Dapper ORM in Visual Studio

Gehen Sie folgendermaßen vor, um mit Dapper zu beginnen:

  1. Öffnen Sie Visual Studio 
  2. Klicken Sie auf Datei -> Neu -> Projekt
  3. Wählen Sie im Dialogfeld "Neues Projekt" die Option "Web -> ASP.Net-Webanwendung"
  4. Geben Sie einen Namen für das Webprojekt an
  5. Wählen Sie die leere Projektvorlage für ASP.Net aus
  6. Klicken Sie auf OK, um das Projekt zu speichern

Dadurch wird ein leeres ASP.Net-Webanwendungsprojekt erstellt.

Wenn Sie NuGet installiert haben, können Sie Dapper mit NuGet installieren. Wählen Sie einfach das Projekt im Projektmappen-Explorer aus, klicken Sie mit der rechten Maustaste auf "NuGet-Pakete verwalten ..." und suchen Sie nach Dapper. Klicken Sie dann auf Installieren, um die Installation von Dapper zu starten. Sobald Dapper erfolgreich installiert wurde, können Sie loslegen.

CRUD in .Net mit Dapper ORM

Schreiben wir nun mit Dapper Code, um CRUD-Operationen für eine Datenbank auszuführen. Stellen Sie sich eine Datenbank mit dem Namen Author vor, die eine Tabelle mit dem Namen Author mit den folgenden Feldern enthält.

  • ICH WÜRDE
  • Vorname
  • Familienname, Nachname

Sie sollten der Einfachheit halber bei der Arbeit mit Dapper eine Entitätsklasse (POCO-Klasse) für diese Datenbanktabelle erstellen. Hier ist die Entitätsklasse mit dem Namen Author, die der Author-Tabelle in der Datenbank entspricht.

public class Author

    {

        public int Id { get; set; }

        public string FirstName { get; set; }

        public string LastName { get; set; }

    }

Mit der Query()Erweiterungsmethode in Dapper können Sie Daten aus der Datenbank abrufen und Daten in Ihrem Objektmodell auffüllen. Die folgende Methode ruft alle Datensätze aus der Author-Tabelle ab, speichert sie im Speicher und gibt die Sammlung zurück.

public List ReadAll()

{

         using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings[“AdventureWorks”].ConnectionString))

         {

            return db.Query

             (“Select * From Author”).ToList();

        }

    }

Beachten Sie, dass Sie den Dapper-Namespace in Ihr Programm aufnehmen sollten, um das Dapper-Framework zu nutzen.

Die folgende Methode zeigt, wie Sie einen bestimmten Datensatz in der Autorentabelle durchsuchen können.

public Author Find(int id)    

    {

        using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings [“AdventureWorks”].ConnectionString))

        {

            return db.Query(“Select * From Author “ + 

            WHERE Id = @Id”, new { id }).SingleOrDefault();

        }

    }

Die Execute()Methode des Dapper-Frameworks kann zum Einfügen, Aktualisieren oder Löschen von Daten in eine Datenbank verwendet werden. Diese Methode gibt einen ganzzahligen Wert zurück, der die Anzahl der Zeilen angibt, die bei der Ausführung der Abfrage betroffen waren.

Die folgende Methode zeigt, wie Sie einen Datensatz mithilfe des Dapper-Frameworks aktualisieren können.

public int Update(Author author)

    {

        using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings [“AdventureWorks”].ConnectionString))

        {

            string sqlQuery +

            “ LastName = @LastName “ + “WHERE Id = @Id”;

            int rowsAffected = db.Execute(sqlQuery, author);

            return rowsAffected;

        }

    }

Wie Sie im obigen Codeausschnitt sehen können, gibt die Update()Methode die Anzahl der betroffenen Zeilen zurück, dh die Anzahl der aktualisierten Datensätze. In diesem Beispiel wurde nur ein Datensatz aktualisiert, und daher würde die Methode bei Erfolg 1 zurückgeben.

Gespeicherte Prozeduren mit Dapper ORM

Um mit gespeicherten Prozeduren mit Dapper zu arbeiten, sollten Sie den Befehlstyp beim Aufrufen der Queryoder der ExecuteMethoden explizit angeben . Hier ist ein Beispiel, das zeigt, wie Sie gespeicherte Prozeduren mit Dapper verwenden können.

 public List Read()

    {

        using (IDbConnection db = new SqlConnection (ConfigurationManager.ConnectionStrings [“AdventureWorks”].ConnectionString))

        {

            string readSp;

            return db.Query(readSp, commandType: CommandType.StoredProcedure).ToList();

        }

    }

Das Dapper-Framework unterstützt auch Transaktionen, dh Sie können bei Bedarf Transaktionsvorgänge verwenden. Zu diesem Zweck können Sie die Methoden BeginTransaction()und EndTransaction()wie gewohnt nutzen, wenn Sie mit Transaktionen in ADO.Net arbeiten. Sie müssten dann Ihre Transaktionsanweisungen in die Methodenaufrufe BeginTransactionund schreiben EndTransaction.

Das Dapper Micro ORM ist extrem leicht und einfach zu bedienen. Es generiert kein SQL für Sie, macht es jedoch einfach, die Ergebnisse von Abfragen Ihren POCOs (einfachen alten CLR-Objekten) zuzuordnen. Das Beste ist, dass Sie eine viel schnellere Ausführungsgeschwindigkeit erhalten als mit Entity Framework - fast genauso wie mit ADO.Net. 

- -

Machen Sie mehr mit C #:

  • So arbeiten Sie mit AutoMapper in C #
  • Wann wird eine abstrakte Klasse im Vergleich zur Schnittstelle in C # verwendet?
  • So arbeiten Sie mit Threads in C #
  • Verwendung des Dapper ORM in C #
  • So implementieren Sie das Repository-Entwurfsmuster in C #
  • So implementieren Sie einen einfachen Logger in C #
  • So arbeiten Sie mit Delegierten in C #
  • So arbeiten Sie mit Action-, Func- und Predicate-Delegaten in C #
  • So arbeiten Sie mit log4net in C #
  • Wie man mit Reflexion in C # arbeitet