Soma 0.15.0.0 リリース

F#で作ったO/Rマッパー Soma 0.15.0.0をリリースしました(F#はもちろんC#VB.NETでも使えます)。ぜひお試しください。

Release Notes
  • Change - SQLパラメータを表現するために, コードクォテーションの利用を止めkey/valueのペアを要素とするリストを採用しました。 (F#)
  • Change - PowerShellスクリプトによるコード生成を改善しました。コードをSQLの実行結果から生成できるようにしました。(F#, C#, VB.NET)

変更点について、以下に補足します。

コードクォテーションの利用の廃止

F#用のAPIで使う場合にのみ関係があります。SQLへのパラメータの渡し方が変わりました。

これまでこう書いていたものが、

let persons = 
MsSql.query<Person> "
select * from Person where JobKind = /* jobKind */0 and PersonName like /* startsWith name */'hoge' escape '$'
"
<@ let jobKind = JobKind.Manager in let name = "M" in () @>
こう書くようになりました。
let persons = 
MsSql.query<Person> "
select * from Person where JobKind = /* jobKind */0 and PersonName like /* startsWith name */'hoge' escape '$'
"
["jobKind" @= JobKind.Manager; "name" @= "M" ]
発行されるSQLはこうなります。

select * from Person where JobKind = 1 and PersonName like N'M%' escape '$'

この変更の理由は次の通りです。

  • 前バージョンでは、コードクォテーションの使い方が一般的なものと異なり使いにくかった
  • 前バージョンでは、コードクォテーションを使う場合内部的にリフレクションを使ってkey/valueのペアをつくる必要があり非効率だった

SQLの実行結果からのコード生成をサポート

PowerShellSQLを実行して得られるメタデータからコードを生成できるようになりました。
たとえばC#用のコードを生成するには次のように実行します。

PS C:\Soma\script> .\gen-dto-cs.ps1 -namespace "Sample" -typeName "Sample" -sql "select * from Employee, Department" > Sample.cs

するとこんなコードが生成されます。

using System;
using Soma.Core;

namespace Sample 
{
    public partial class Sample
    {
        [Column(Name = "EmployeeId")]
        public Int32 EmployeeId { get; set; }
        [Column(Name = "EmployeeName")]
        public String EmployeeName { get; set; }
        [Column(Name = "DepartmentId")]
        public Int32 DepartmentId { get; set; }
        [Column(Name = "VersionNo")]
        public Int32 VersionNo { get; set; }
        [Column(Name = "DepartmentName")]
        public String DepartmentName { get; set; }
    }
}

何がうれしいかというと、任意のSQLを発行してその結果をクラスに詰めたい場合に自分でコードを書く必要がないことです。ただSQLを発行すればそれに対応するクラスのソースコードが手に入るのです。この例ではC#を扱いましたが、F#、VB.NETのコードも生成できます。
スクリプトは適当に改良してもらって、WindowsFormからSQLを発行してコードもWindowsForm上に表示されるようするともっと便利かもしれません。

ドキュメントはこちらです。

スクリプトのコードはこのURLで開く画面の左からscriptディレクトリへ進んだところにあります。