読者です 読者をやめる 読者になる 読者になる

ささいなことですが。

Windowsアプリテスト自動化ライブラリFriendly開発者の日記です。

LambdicSql - 断捨離 O/Rマッパー機能 捨てました。-

LambdicSql C#

LambdicSqlもSQLを実行して、その結果をオブジェクトにマッピングする機能がありました。Dapperよりも便利なところもあって、匿名クラスにマッピングすることもできてました。ではなぜやめたか。
※Dapperでも匿名クラスにマッピングでる場合もあります。でも、失敗するケースもあり。DateTimeが入っていると大抵失敗する。詳細は追っていません。

//便利なとこもあるけど、この機能は捨てた
public void Test()
{
    //以前は匿名クラスにマッピングすることも可能だった。
    var query = Db<DB>.Sql<DB>().
    Select(db => new
    {
        name = db.tbl_staff.name,
        payment_date = db.tbl_remuneration.payment_date,
        money = db.tbl_remuneration.money,
    }).
    From(db => db.tbl_remuneration).
        Join(db => db.tbl_staff, db => db.tbl_remuneration.staff_id == db.tbl_staff.id);

    //読み取り専用なはずの匿名クラスにマッピング
    var data = query.ToExecutor(new SqlConnection(sqlConnectionString)).Read();
}

特徴を際立たせる

LambdicSqlはラムダからSQLを作成するためのライブラリです。DBにはアクセスしたり、マッピングする機能ははオマケだったのです。でも両方あると「新種のO/Rマッパーね」くらいに捉えられて特徴が伝わりづらいのではないかなーと。

Dapper or LambdicSqlだとDapper使うよね。

折角つくったのだから、広く多くの人に使ってもらいたいですよね。でもこの分野はEntityFrameworkやDapperがすでにあり、そんな信頼性の高いライブラリと張り合てもなかなかねー。総監督からも、「Dapperの利用者が二択せまられたら、Dapper使うよねー」とのご意見をいただきました。それはそうですね。

LambdicSql feat.Dapper

Hey yo yo yeah!オレたちDapperマジリスペクト!
ってわけでフィーチャリングします。実際DapperとLambdicSqlでは注力している部分が違うのです。LambdicSqlでSQLを組み立てて、実行はDapperでやってもらえばよいかなーって思います。ということでサンプルコードです。

public void TestStandard()
{
    var min = 3000;

    //LambdicSqlのお仕事
    //SQLを組み立てる
    var query = Db<DB>.Sql(db =>
        Select(new SelectData()
        {
            Name = db.tbl_staff.name,
            PaymentDate = db.tbl_remuneration.payment_date,
            Money = db.tbl_remuneration.money,
        }).
        From(db.tbl_remuneration).
            Join(db.tbl_staff, db.tbl_staff.id == db.tbl_remuneration.staff_id).
        Where(min < db.tbl_remuneration.money && db.tbl_remuneration.money < 4000));

    //テキストとパラメータに落とす
    var info = Db<DB>.Sql(_connection.GetType());
    Debug.Print(info.SqlText);

    //ここから先はDapperにお任せ
    //パラメータはDictionary<string, object>で渡す
    var datas = _connection.Query<SelectData1>(query).ToList();
}

というわけでDapper使いの皆さま、合わせてLambdicSqlのご利用もお願いします!