C# Dapper – Anweisungen zum Auswählen, Einfügen, Aktualisieren und Löschen erstellen

C# Dapper – Anweisungen zum Auswählen, Einfügen, Aktualisieren und Löschen erstellen

Dapper macht es einfach, "eine Abfrage auszuführen und die Ergebnisse - falls vorhanden - einer stark typisierten Liste zuzuordnen". Dieser Beitrag demonstriert, wie man select-, insert-, update- und delete-Anweisungen mit Dapper ausführt.

  • Beispieltabelle und -klasse
  • Beispiel einfügen
  • Beispiel auswählen
  • Aktualisierungsbeispiel
  • Beispiel löschen

Beispieltabelle und -klasse

Für diesen Beitrag verwenden wir die folgende Tabelle:

CREATE TABLE [dbo].[MyEntities](
	[Id] [int] IDENTITY(1,1) NOT NULL,
	[Text] [nvarchar](max) NOT NULL,
   CONSTRAINT [PK_MyEntities] PRIMARY KEY CLUSTERED 
   (
	  [Id] ASC
   )
)

Oben ist eine Tabelle mit einem einfachen int Identitätsspalte und eine nvarchar Spalte für einen Text. Ein Bild davon aus dem SQL Management Studio ist unten zu sehen:

Vergiss die EFMigrationsHistory-Tabelle, ich habe diese Datenbank aus einem früheren Blogbeitrag wiederverwendet :)

Wir werden die folgende Matching-Klasse für die Tabelle verwenden:

[Table("MyEntities")]
public class MyEntity
{
    public int Id { get; set; }
    public string Text { get; set; }
}

Sie hat einen anderen Namen als die Tabelle, da ich Klassen im Singular mag, damit dies funktioniert, müssen wir den Table hinzufügen Anmerkung. Ansonsten stimmen seine Eigenschaften mit den Spalten der Tabelle überein.

Einfügen

Wir können die Execute-Methode direkt auf einer SQL-Verbindung verwenden, um eine Zeile einzufügen:

using (var sqlConnection = new SqlConnection(@"Data Source=localhost;Initial Catalog=MyDb;Integrated Security=True;"))
{
    sqlConnection.Execute("INSERT INTO [dbo].[MyEntities] (Text) VALUES (@Text);", new MyEntity { Text = "this is a text" });
}

Oben öffnen wir eine Verbindung zur Datenbank mit einer Standard-SqlConnection. Wir stellen dann eine SQL-Einfügungsanweisung zusammen mit der Entität bereit, die wir in Execute einfügen möchten Methode. Die Methode execute gibt die Anzahl der betroffenen Zeilen zurück, nicht die Identität der neu erstellten Zeile. Sie können dies jedoch erreichen, indem Sie den output verwenden Klausel in Ihrer SQL-Anweisung wie folgt:

using (var sqlConnection = new SqlConnection(@"Data Source=localhost;Initial Catalog=MyDb;Integrated Security=True;"))
{
    var identity = sqlConnection.QuerySingle<int>("INSERT INTO [dbo].[MyEntities] (Text) output inserted.Id VALUES (@Text);"
        , new MyEntity { Text = "this is a text" });
}

Dapper.Contrib verwenden

Sie können das Nuget-Paket Dapper.Contrib verwenden, um das Obige weiter zu vereinfachen. Das vorherige Beispiel kann mit Dapper.Contrib auf Folgendes reduziert werden:

using (var sqlConnection = new SqlConnection(@"Data Source=localhost;Initial Catalog=MyDb;Integrated Security=True;"))
{
    var identity = sqlConnection.Insert(new MyEntity { Text = "this is a text" });
}

Mit Dapper Contrib müssen Sie kein SQL schreiben, es bildet dies von selbst ab. Das Abrufen der Identität ist auch in die Insert-Anweisung integriert.


Auswählen

Sie können eine einfache Abfrage in Dapper durchführen, indem Sie eine der vielen Erweiterungsmethoden für die Verbindung verwenden. Nachfolgend finden Sie ein Beispiel für die Verwendung von Query Methode:

using (var sqlConnection = new SqlConnection(@"Data Source=localhost;Initial Catalog=MyDb;Integrated Security=True;"))
{
    string sql = "SELECT id, text FROM [dbo].[MyEntities] WHERE id = @id";
    var results = sqlConnection.Query<MyEntity>(sql, new { id = 1 });
}

Oben geben wir eine Liste von MyEntities zurück, die unserer Klasse MyEntity zugeordnet sind . Sie können statt einer Liste von Datensätzen auch einen einzelnen Datensatz auswählen:

using (var sqlConnection = new SqlConnection(@"Data Source=localhost;Initial Catalog=MyDb;Integrated Security=True;"))
{
    string sql = "SELECT id, text FROM [dbo].[MyEntities] WHERE id = @id";
    var results = sqlConnection.Query<MyEntity>(sql, new { id = 1 });
}

Das obige funktioniert so, wie Sie etwas mit dem Namen Single erwarten würden to - es schlägt fehl, wenn nicht genau ein Datensatz zurückgegeben wird, wohingegen QueryFirstOrDefault gibt die erste Zeile mit einer Übereinstimmung zurück oder den Standardwert (in diesem Fall null):

using (var sqlConnection = new SqlConnection(@"Data Source=localhost;Initial Catalog=MyDb;Integrated Security=True;"))
{
    string sql = "SELECT id, text FROM [dbo].[MyEntities] WHERE id = @id";
    var results = sqlConnection.QueryFirstOrDefault<MyEntity>(sql, new { id = 1 }); 
}

Aktualisieren

Das Ausführen einer Update-Anweisung mit Dapper ähnelt einer Einfügung:

using (var sqlConnection = new SqlConnection(@"Data Source=localhost;Initial Catalog=MyDb;Integrated Security=True;"))
{
    string sql = "update [dbo].[MyEntities] set text = @text WHERE id = @id";
    var results = sqlConnection.Execute(sql, new MyEntity { Id = 1, Text = "this is another text"});
}

Oben aktualisieren wir den Text der Entität mit der ID 1. Der Code ähnelt der Einfügung, da wir unsere Aktualisierungsanweisung schreiben und dann passende Parameter bereitstellen müssen. Die Methode Execute gibt die Anzahl der betroffenen Zeilen zurück.

Dapper.Contrib verwenden

Sie können das Nuget-Paket Dapper.Contrib verwenden, um das Obige zu vereinfachen. Das vorherige Beispiel kann mit Dapper.Contrib auf Folgendes reduziert werden:

using (var sqlConnection = new SqlConnection(@"Data Source=localhost;Initial Catalog=MyDb;Integrated Security=True;"))
{
    var results = sqlConnection.Update(new MyEntity { Id = 2, Text = "this is another text" });
}

Im obigen müssen Sie selbst kein SQL schreiben, sondern geben nur das Objekt an, das Sie aktualisieren möchten.


Löschen

Das Ausführen einer Löschanweisung mit Dapper ähnelt einem Einfügen und Aktualisieren:

using (var sqlConnection = new SqlConnection(@"Data Source=localhost;Initial Catalog=MyDb;Integrated Security=True;"))
{
    string sql = "delete from [dbo].[MyEntities] WHERE id = @id";
    var results = sqlConnection.Execute(sql, new MyEntity { Id = 1 });
}

Oben löschen wir die Entität mit der ID 1. Der Code ähnelt dem Einfügen und Aktualisieren, da wir unsere SQL-Anweisung schreiben und dann passende Parameter bereitstellen müssen. Die Methode Execute gibt die Anzahl der betroffenen Zeilen zurück.

Dapper.Contrib verwenden

Sie können das Nuget-Paket Dapper.Contrib verwenden, um das Obige zu vereinfachen. Das vorherige Beispiel kann mit Dapper.Contrib auf Folgendes reduziert werden:

using (var sqlConnection = new SqlConnection(@"Data Source=localhost;Initial Catalog=MyDb;Integrated Security=True;"))
{
    var results = sqlConnection.Delete(new MyEntity { Id = 2 });
}

Im obigen müssen Sie selbst kein SQL schreiben, sondern geben nur das Objekt an, das Sie löschen möchten.

Das ist es

Ich hoffe, Sie fanden diesen Beitrag hilfreich. Wenn etwas unklar war oder Sie sonstiges Feedback haben, wenden Sie sich bitte in die Kommentare unten!