「Dapper」の版間の差分

提供: MonoBook
ナビゲーションに移動 検索に移動
imported>Administrator
1行目: 1行目:
'''Dapper'''とは、[[.NET Framework]]向けの俗にいうMicro ORM。
+
'''Dapper'''(読み:だっぱー)とは、[[.NET Framework]]向けの[[マイクロORM]]である。
[[Entity Framework]]や[[Active Record]]のような重量級ORMとは違い、[[SQL]]周りの[[ソースコード]]をまるで[[PHP]]などの[[LL言語]]を使っているかのようにサラサラと書けるという代物。
 
  
公式サイトでは[[SQL Server]]と[[SQL Lite]]で動作確認をしているとのことだが、[[MySQL]]([[MySQL Connector/NET]])でもちょろっと使ってみた限りでは特に問題はない模様。
+
== 概要 ==
 +
Dapperは[[Entity Framework]]や[[Active Record]]のような重量級ORMとは違い、[[SQL]]周りの[[ソースコード]]をまるで[[PHP]]などの[[LL言語]]を使っているかのようにサラサラと書けるという代物であり、[[外部キー]]を頼りに[[リレーション]]を自動解決してくれるなどという重量級[[ORM]]の主要機能といわれるものは一切搭載していない。
 +
 
 +
公式サイトでは[[SQL Server]]と[[SQL Lite]]で動作確認をしているとのことだが、[[MySQL]]([[MySQL Connector/NET]])でもちょろっと使ってみた限りでは特に問題はない模様である。
  
 
== 使い方 ==
 
== 使い方 ==

2013年7月23日 (火) 08:07時点における版

Dapper(読み:だっぱー)とは、.NET Framework向けのマイクロORMである。

概要

DapperはEntity FrameworkActive Recordのような重量級ORMとは違い、SQL周りのソースコードをまるでPHPなどのLL言語を使っているかのようにサラサラと書けるという代物であり、外部キーを頼りにリレーションを自動解決してくれるなどという重量級ORMの主要機能といわれるものは一切搭載していない。

公式サイトではSQL ServerSQL Liteで動作確認をしているとのことだが、MySQLMySQL Connector/NET)でもちょろっと使ってみた限りでは特に問題はない模様である。

使い方

SELECT

public class UserRawModel
{
    public string user_id { get; set; }
    public string user_name { get; set; }
    // nullable
    public int?   user_age { get; set; }
}  

var guid = Guid.NewGuid();

var user = connection.Query<UserRawModel>(
  @"select user_age = @user_age, user_id = @user_id"
  , new { user_age = (int?)null, user_id = guid });

Console.WriteLine(dog.Count()); // 1
Console.WriteLine(dog.First().user_age); // null
Console.WriteLine(dog.First().user_id); // guid

SELECT

結果が匿名型で自動生成されます。 まるでPHPのように扱いたいひと向け。

インテリセンスが効かない、参照先・参照元の一覧出力ができないなどの副作用を伴うので乱用はやめた方がいいけど、手軽すぎてやめられない。 前述の理由でクラステーブルが1対1で問題ない場合は使うべきではないですが、joinした結果を受け取りたい場合などにそのためだけに専用のマッピングクラスを作るのは面倒なのでこれを使うと手軽。

クエリー

select 1 A, 2 B union all select 3, 4;

結果

+---+---+
| A | B |
+---+---+
| 1 | 2 |
| 3 | 4 |
+---+---+

これを取得するコード。

var rows = connection.Query("select 1 A, 2 B union all select 3, 4")
    .ToList(); // 配列(リスト)に変換

Console.WriteLine(rows[0].A);
Console.WriteLine(rows[0].B);
Console.WriteLine(rows[1].A);
Console.WriteLine(rows[1].B);

INSERT

// {1,1},{2,2},{3,3}という3行がinsertされる
// 戻り値は変更された行数
var affected_rows = connection.Execute(
    @"insert MyTable(colA, colB) values (@a, @b)",
    new[] { // パラメータを配列にすると複数行をinsertできます。
        new { a=1, b=1 },
        new { a=2, b=2 },
        new { a=3, b=3 } 
    }
);

関連項目

外部リンク