2015年5月19日火曜日

DapperExtensionsを使ってみる

Dapperの拡張ライブラリDapperExtensionsについてです。


Dapperとは

 
  すでに解説されてる方がたくさんいらっしゃるので、そちらをご覧ください。


DapperExtensionsとは

  
DapperはORMと冠しているものの、実際はクエリすべて手打ちです。(それがいいんですが)
なんですが、単純なSELECTやINSERT、UPDATE、DELETEはいちいち手打ちするのも面倒!
そんな時に、さくっとかけるようになるDapperの拡張ライブラリです。
 

DapperExtensionsの基本的な使い方


※以下コード部分はC#で記載します。

まず、DapperとDapperExtensionsをNugetなどでプロジェクトに追加します。

PM> Install-Package Dapper
PM> Install-Package DapperExtensions


例えばこんな構成のPersonsテーブルがあったとして、
※主キーはIdentity








こんな、エンティティクラスがあったとします。
public class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
}


登録処理を記述するクラスにDapperと、DapperExtensions名前空間をusing します。
 using DapperExtensions;
 using DapperExtensions.Mapper;


今回はテーブル名がPersons、エンティティクラス名がPerson、なので複数形と単数形を変換するルールをプログラム開始時に指定します。
(この処理は1回だけ呼べばOKです。)
DapperExtensions.DapperExtensions.DefaultMapper = typeof(PluralizedAutoClassMapper<>);

Connectionオブジェクトを作成します。

 var connection = new SqlConnection("<接続文字列>");
 connection.Open();

あとは以下ような感じで登録・更新・削除できます。

新規登録(Insert)

connection.Insert(new Person { Name = "テスト太郎" });

更新(Update)

connection.Update(new Person { Id = 1, Name = "テスト太郎更新" });

削除(Delete)

connection.Delete(new Person { Id = 1 });


※connectionのDispose処理記載するの省略してます。

その他

※デフォルトではテーブルの主キーが1つで、IdやPersonIdといった名称の場合にのみ対応します。
複合キーだったりした場合は別途マッピングルールを指定する必要があります。(あとテーブル名とエンティティクラス名が異なる場合とか)
(最初それについて書くつもりだったんですが、だらだらと長くなりそうだったので次回)

雑記

会社で業務システムに携わってるとあれな設計のテーブルも多く(1テーブルカラム100以上とか)、 そういったテーブルに対していちいち単純なSQL文書くのもめんどくさいのでとても重宝してます。

エンティティクラスと条件指定して簡単な検索(SELECT文発行)なんかもできるんですが、これについてはDapperExtensions使わずに、素直にクエリ書いたほうが楽だと思います。条件の指定方法が独特だったり、少し複雑にしようと思うと対応できなかったりします。

0 件のコメント:

コメントを投稿