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 =発行されるSQLはこうなります。
MsSql.query<Person> "
select * from Person where JobKind = /* jobKind */0 and PersonName like /* startsWith name */'hoge' escape '$'
" ["jobKind" @= JobKind.Manager; "name" @= "M" ]
select * from Person where JobKind = 1 and PersonName like N'M%' escape '$'
この変更の理由は次の通りです。
- 前バージョンでは、コードクォテーションの使い方が一般的なものと異なり使いにくかった
- 前バージョンでは、コードクォテーションを使う場合内部的にリフレクションを使ってkey/valueのペアをつくる必要があり非効率だった
SQLの実行結果からのコード生成をサポート
PowerShellでSQLを実行して得られるメタデータからコードを生成できるようになりました。
たとえば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上に表示されるようするともっと便利かもしれません。
ドキュメントはこちらです。