Soma
.NETのO/Rマッパー Soma 0.7.0.0 をリリースしました。F#、C#、VB.NETをサポートします。 http://soma.codeplex.com/releases/view/64498 今回のリリースでは、C#やVB.NETから使いやすいように、クラスの名前を調整しました。それと、C#を意識したドキュメン…
.NETのO/Rマッパー Soma 0.6.0.0 をリリースしました。 http://soma.codeplex.com/releases/view/64164 F#、C#、VB.NETで動作します。それぞれの言語ごとにサンプルプロジェクトを作ったので、それらを見ると使い方のイメージが湧くと思います。.NETのバージ…
F#には単位という非常にクールな機能があります。F#でSomaを使えばこの機能が利用でき、わかりやすいプログラムを安全に(コンパイル時にチェックされるので)記述できます。サンプルを見てみましょう。まず、センチメートル、メートル、キログラム、そして…
かんたんにいうとF#の次の特長を活かせます。 nullを排除できる 値をimmutableにできる それってF#なんだから当然でしょ、と思うかもしれません。しかし、既存のO/Rマッパーを使おうとすると上の2つの特徴はたやすく犠牲になってしまうのです。既存のO/Rマッ…
F#で作ったO/RマッパーSoma 0.5.0.0をリリースしました(C#やVB.NETでも使えます)。 http://soma.codeplex.com/releases/view/63671 今回リリースのメインの機能は2つです。 Enumのサポート ストアドプロシージャ呼び出しのサポート Enumサポートの機能は以…
F#で開発したO/Rマッパー Soma 0.4.0.0 をリリースしました。 http://soma.codeplex.com/ 今回のリリースの目玉は、C#とVB.NETのサポートです。実行させるにはもちろんF#のライブラリが必要ですが、API的にはF#のことを気にすることなく扱えるようにしました…
一番異なるのはバインドする値の渡し方です。F#はコード引用符で渡しますが、C#(VB.NET)は匿名型で渡します。見た目は似ているのでそんなに気にならないかも。 F# let empList = MyDb.query<Employee> "select * from Employee where DepartmentId = /* deptId */0 a</employee>…
次のリリースからサポート予定です。 使用例ですが、テーブルの定義とレコードの定義は次のようになります。PersonテーブルのJobKindカラムにJobKind列挙型をマッピングします。 DDL create table Person ( PersonId int identity primary key, PersonName v…
F#のO/Rマッパー Soma 0.3.0.0 をリリースしました。 http://soma.codeplex.com/ SQL Server 2008 に加えて MySQL 5.x をサポートしてます。
SQLのログを扱う機能はO/Rマッパーに必須だと思っています。 Somaでは、MsSqlConfigのLogメソッドをオーバーライドすることで自由にログを扱えます。扱える情報は3つあります。パラメータつきのSQL、パラメータが実際の値に置き換えられたSQL、パラメータ名…
Somaが提供する属性はたった4つです。いずれもレコード型(またはそのフィールド)にのみ指定できます。 Id 主キーに対応するフィールドに指定。採番方法を設定できる Version 楽観的排他制御のためのバージョン番号に対応するフィールドに指定。現状は数値…
F#に特化したO/Rマッパー Soma 0.1.0.1をリリースしました。 http://soma.codeplex.com/ ドキュメントはまだほとんどないのですが、codeplexのHomeにはCRUDのサンプルを載せました。とりあえずはイメージをつかんで貰えればなぁと思います。機能的には、当初…
Somaは「Sql Oriented MApping framework」のアクロニムです。というわけでSQLを柔軟に発行できるのがアピールポイントです。今日はSomaの中心機能であるクエリ機能を紹介したいと思います。SQLはS2Daoに由来する2 Way SQL(SQL文字列をそのままツールで実行…
SomaのDbモジュールはService層とかBusinessLogic層とか呼ばれるレイヤでは呼び出さず、DAOとかRepositoryに相当するレイヤから利用するのがいいと思います。たとえば、次のような関数の実装として利用するのがいいのではと思います。 パラメータを個別に渡…
C#で作っていたのですが、F#が面白いのでF#で作り直すことにしました。Somaは、SQLやSQLに埋め込まれた簡易的な式言語をパースしたりするんですが、C#では正規表現をつかって何とかしてました。F#ではこのあたりの処理にF# PowerPackのfsyaccとfslexを使える…
ちょっとずつ作っているEntity Framework拡張のO/RマッパーSoma(http://soma.codeplex.com/)ですが、更新系SQLの生成をEntity Frameworkにまかせるのをやめました。マッピングの定義はedmxにあるのでパースして自前でSQLを組み立てることにしました。理由…
いま持っているアイデア。 SQLの実行前後をEventでフックできるようにする パフォーマンスを向上させる(リフレクションやSQLの解析結果のキャッシュとか) 例外的な状況の精査 Tips集
Entity Frameworkを使いやすくするO/Rマッパー Soma 0.0.3.0をリリースしました。 http://soma.codeplex.com/releases/view/50678今回のポイントは、セットアップがとても簡単になったことです。これまで、edmxファイルをビルドイベントで書き換えたり、専用…
バージョン番号の自動インクリメント 楽観的排他制御のためにWHERE句に特定のカラムを条件として入れる機能はありますが、「バージョン番号」という考え方がないんですね。したがって、バージョン番号を自動でインクリメントする機能もありません。 これは不…
Soma 0.0.2.0では、Repositoryのメソッドを呼び出した場合に複数のSQLが自動で実行される場合があります。たとえば、DepartmentにEmployeeを関連付けてDepartmentをINSERTする場合が当てはまります。 var departmentRepository = new DepartmentRepository()…
ADO.NET Entity Frameworkを使いやすくするO/RマッパーSoma 0.0.2.0をリリースしました。 http://soma.codeplex.com/releases/view/50010 今回の目玉はドキュメントです。スクリーンショットをできるだけ使ってわかりやすくしてみました。 http://soma.codep…
ドキュメント書いたり、機能改善したりしています。ドキュメントはまだ道半ばですが、「クイックスタート」と「SQLファイル」の項目はほぼほぼ終わり。 http://soma.codeplex.com/documentation 機能改善は細かいものをいくつかやりました。 Entity Framewor…
Management Studioが入っているからなのかわからないですが、Visual Studio 2010で拡張子が.sqlのファイルを開くとエディタでSQLを補完したり、エディタからSQLを実行できますね(Management Studioの機能をつかっているみたい)。前のバージョンからそうな…
SQLのログって自由にハンドリングしたいですよね。 Somaではこんなインタフェースを用意しました。 public interface ILogger { void LogBeforeExecution(LogContext logContext); void LogAfterExecution(LogContext logContext); } LogBeforeExecutionはSQ…
SomaではRepositoryパターンは必須というわけではないですが、推奨しています。 次のような抽象クラスを提供しています(メソッドとコンストラクタはシグネチャだけを表示)。 public abstract class RepositoryBase<TObjectContext, TEntity> where TObjectContext: ObjectContext wh</tobjectcontext,>…
.NET Framework用O/Rマッパー? Soma 0.0.1.0 をリリースしました。 マッピングするところはADO.NET Entity FrameworkにおまかせなのでO/Rマッパーというと語弊があるかなぁ。どんなものかはプロジェクトの概要(http://soma.codeplex.com/)に書きましたが、…
Soma(http://soma.codeplex.com/)でSQLのログ出力を実装できました。 たとえばこんなコードを記述すると using (var context = new SampleEntities()) { context.Employee.Where(e => e.Id > 1).ToList(); Console.WriteLine("------------"); context.Exe…
Entity FrameworkのサンプルだとDaoじゃなくてRepositoryのほうが多い気がするのでDBアクセスを行うクラスをRepositoryと呼ぶことにします。自分の中ではどっちもおんなじですけど。アプリでつくるRepositoryはこんな感じになります。 public class Employee…
SQLの管理ですが、リソースファイル(resxファイル)を使うのがいいんじゃないかと考えています。いままで試したことがなかったのですが、リソースファイルでは文字列や画像だけでなくテキストファイルを管理できるのでこれが使えるんじゃないかと。 リソース…
Somaは、Entity Frameworkをベースにしたフレームワークにすることにしました。PostSharpを使うのは見送り。O/Rマッパーには必須と思われるSQLのログを出力する機能がEntity Frameworkにはないので、プロバイダーをラップしてSQLが実行される直前でログ出力…