【C#】Dapper Extensions を使おう!
Dapper Extensions は、Dapperで簡単なCRUD操作を可能としてくれる軽量で素敵なライブラリです。 基本的な使い方は以下のgithubページにまとまっていますが、自分なりにポイントをまとめます。
https://github.com/tmsmith/Dapper-Extensions
まず前提として以下のようなテーブルを操作すると仮定して説明します。 テーブル名:Users カラム:UserId, Name, Age, Sex
マッピングクラスを準備する
テーブル名と同じ名前でクラスを準備します。 別名にすることもできますが、その方法については別途記載します。
class Users { public int UserId { get; set; } public string Name { get; set; } public int Age { get; set; } public string Sex { get; set; } }
GET操作
主キーで検索する
主キー検索は引数に主キーの値を設定します。 ちなみにマッピングクラス内で最初に登場する"id"がつく変数を主キーとして認識します。
using (var connection = new SqlConnection("接続文字列")) { connection.Open(); // GET 引数にUserIdを指定 var user = connection.Get<Users>(1); }
主キー以外で検索する
主キー以外で検索する場合は、検索条件をPredicatesに設定してからおこないます。
using (var connection = new SqlConnection("接続文字列")) { connection.Open(); // 検索条件を作成 var predicate = Predicates.Field<Users>(f => f.Name, Operator.Eq, "神谷浩史"); // GET 引数に検索条件を設定 // FirstOrDefault で先頭の検索結果のみ取得 var user = connection.GetList<Users>(predicate).FirstOrDefault(); }
複数条件指定で検索する
複数条件設定する場合は、PredicateGroupを作ります。
using (var connection = new SqlConnection("接続文字列")) { connection.Open(); // 検索条件を作成 var pg = new PredicateGroup { Operator = GroupOperator.And, Predicates = new List<IPredicate>() }; pg.Predicates.Add(Predicates.Field<Users>(f => f.Age, Operator.Eq, 20)); pg.Predicates.Add(Predicates.Field<Person>(f => f.Sex, Operator.Eq, "男")); // GET 引数に検索条件を設定 var users = connection.GetList<Users>(pg); }
INSERT操作
Insertする場合は、マッピングクラスに値を設定してInsertメソッドに渡すだけです。 この例では主キーがidentityですが、identityでない場合は別の機会に説明します。
using (var connection = new SqlConnection("接続文字列")) { connection.Open(); // INSERTする値を設定 var user = new Users { Name = "神谷浩史", Sex = "男" }; // INSERT // identity の値が返ってくる var id = connection.Insert(user); }
UPDATE操作
Updateする場合もマッピングクラスに値を設定してUpdateメソッドに渡すだけです。 ただし全てのカラムを更新するので、直前で現在のDBの値を取得してから更新しましょう。
using (var connection = new SqlConnection("接続文字列")) { connection.Open(); // 現在の値を取得して、更新する値を設定 var user = connection.Get<Users>(1); user.Age = 40; // UPDATE connection.Update(user); }
DELETE操作
Deleteする場合はマッピングクラスに主キーを設定してDeleteメソッドに渡すだけです。
using (var connection = new SqlConnection("接続文字列")) { connection.Open(); // 主キーを設定 var user = new Users { UserId = 1 }; // DELETE connection.Delete(user); }
基本的な使い方は以上です。 非常に簡単に使い始めることができ、Dapperをさらに使いやすくしてくれます。
今回は説明しませんでしたが、マッピングクラスとテーブル名が異なる場合や、主キーをIdentityとしない場合でもDapper Extensionsを使用することができます。 これらの実装方法についてはまた別の機会にまとめようと思います。