C# Dapper - select、insert、update、および delete ステートメントを作成する方法

Dapper を使用すると、「クエリを実行し、その結果 (存在する場合) を厳密に型指定されたリストにマップする」ことが簡単になります。この投稿では、Dapper を使用して select、insert、update、および delete ステートメントを実行する方法を示します。

  • テーブルとクラスの例
  • 例を挿入
  • 例を選択
  • 更新の例
  • 削除の例

テーブルとクラスの例

この投稿では、次の表を使用します:

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

上記は単純な int の表です ID 列と nvarchar テキストの列。 SQL Management studio からのこのイメージを以下に示します:

EFMigrationsHistory テーブルは気にしないでください。以前のブログ投稿からこのデータベースを再利用しました :)

テーブルには次のマッチング クラスを使用します:

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

クラスを単数形にするのが好きなので、テーブルとは異なる名前が付けられています。これを機能させるには、Table を追加する必要があります。 注釈。それ以外は、そのプロパティはテーブルの列と一致します。

挿入

SQL 接続で Execute メソッドを直接使用して、行を挿入できます。

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" });
}

上記では、標準の SqlConnection を使用してデータベースへの接続を開きます。次に、Execute に挿入するエンティティとともに SQL 挿入ステートメントを提供します。 方法。 execute メソッドは、新しく作成された行の ID ではなく、影響を受けた行の数を返します。ただし、 output を使用して取得できます 次の SQL ステートメントの句:

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 の使用

nuget パッケージ Dapper.Contrib を使用して、上記をさらに簡素化できます。前の例は、Dapper.Contrib を使用して次のように縮小できます。

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" });
}

Dapper Contrib を使用すると、SQL を記述する必要がなく、それ自体でマップされます。 ID の取得も Insert ステートメントに組み込まれています。


選択

接続の多くの拡張メソッドの 1 つを使用して、Dapper で簡単なクエリを作成できます。以下は Query の使用例です。 メソッド:

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 });
}

上記では、クラス MyEntity にマップされた MyEntities のリストを返します。 .レコードのリストではなく、単一のレコードを選択することもできます:

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 });
}

上記は、 Single という名前のものが期待どおりに機能します to - QueryFirstOrDefault に対して、1 つのレコードが返されない場合は失敗します。 一致する最初の行を返すか、デフォルト値 (この場合は 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 }); 
}

更新

Dapper で更新ステートメントを実行することは、挿入に似ています。

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"});
}

In the above we update the text of the entity with id 1. コードは、更新ステートメントを記述してから一致するパラメーターを提供する必要があるため、insert に似ています。 Execute メソッドは、影響を受けた行数を返します。

Dapper.Contrib の使用

nuget パッケージ Dapper.Contrib を使用して、上記を簡素化できます。前の例は、Dapper.Contrib を使用して次のように縮小できます。

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" });
}

上記では、自分で SQL を記述する必要はありませんが、更新したいオブジェクトを提供するだけです。


削除

Dapper で削除ステートメントを実行することは、挿入と更新に似ています。

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 });
}

上記では、id 1 のエンティティを削除します。SQL ステートメントを記述してから、一致するパラメーターを指定する必要があるため、コードは挿入と更新に似ています。 Execute メソッドは、影響を受けた行数を返します。

Dapper.Contrib の使用

nuget パッケージ Dapper.Contrib を使用して、上記を簡素化できます。前の例は、Dapper.Contrib を使用して次のように縮小できます。

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

上記では、自分で SQL を記述する必要はありませんが、削除したいオブジェクトを提供するだけです。

それだけです

この投稿がお役に立てば幸いです。不明な点やその他のフィードバックがある場合は、下のコメント欄でお知らせください。