Soma

Soma 0.7.0.0 リリース

.NETのO/Rマッパー Soma 0.7.0.0 をリリースしました。F#、C#、VB.NETをサポートします。 http://soma.codeplex.com/releases/view/64498 今回のリリースでは、C#やVB.NETから使いやすいように、クラスの名前を調整しました。それと、C#を意識したドキュメン…

Soma 0.6.0.0 リリース

.NETのO/Rマッパー Soma 0.6.0.0 をリリースしました。 http://soma.codeplex.com/releases/view/64164 F#、C#、VB.NETで動作します。それぞれの言語ごとにサンプルプロジェクトを作ったので、それらを見ると使い方のイメージが湧くと思います。.NETのバージ…

F#でSomaを使うメリット その2 : 単位の利用

F#には単位という非常にクールな機能があります。F#でSomaを使えばこの機能が利用でき、わかりやすいプログラムを安全に(コンパイル時にチェックされるので)記述できます。サンプルを見てみましょう。まず、センチメートル、メートル、キログラム、そして…

F#でSomaを使うメリット

かんたんにいうとF#の次の特長を活かせます。 nullを排除できる 値をimmutableにできる それってF#なんだから当然でしょ、と思うかもしれません。しかし、既存のO/Rマッパーを使おうとすると上の2つの特徴はたやすく犠牲になってしまうのです。既存のO/Rマッ…

Soma 0.5.0.0 リリース

F#で作ったO/RマッパーSoma 0.5.0.0をリリースしました(C#やVB.NETでも使えます)。 http://soma.codeplex.com/releases/view/63671 今回リリースのメインの機能は2つです。 Enumのサポート ストアドプロシージャ呼び出しのサポート Enumサポートの機能は以…

Soma 0.4.0.0 リリース

F#で開発したO/Rマッパー Soma 0.4.0.0 をリリースしました。 http://soma.codeplex.com/ 今回のリリースの目玉は、C#とVB.NETのサポートです。実行させるにはもちろんF#のライブラリが必要ですが、API的にはF#のことを気にすることなく扱えるようにしました…

Soma 0.4.0.0 で F# と C# の一番の違い

一番異なるのはバインドする値の渡し方です。F#はコード引用符で渡しますが、C#(VB.NET)は匿名型で渡します。見た目は似ているのでそんなに気にならないかも。 F# let empList = MyDb.query<Employee> "select * from Employee where DepartmentId = /* deptId */0 a</employee>…

Enumとのマッピング

次のリリースからサポート予定です。 使用例ですが、テーブルの定義とレコードの定義は次のようになります。PersonテーブルのJobKindカラムにJobKind列挙型をマッピングします。 DDL create table Person ( PersonId int identity primary key, PersonName v…

Soma 0.3.0.0 リリース

F#のO/Rマッパー Soma 0.3.0.0 をリリースしました。 http://soma.codeplex.com/ SQL Server 2008 に加えて MySQL 5.x をサポートしてます。

Soma 0.1.0.1 のSQLログ機能の紹介

SQLのログを扱う機能はO/Rマッパーに必須だと思っています。 Somaでは、MsSqlConfigのLogメソッドをオーバーライドすることで自由にログを扱えます。扱える情報は3つあります。パラメータつきのSQL、パラメータが実際の値に置き換えられたSQL、パラメータ名…

Soma 0.1.0.1 の属性(アトリビュート)の紹介

Somaが提供する属性はたった4つです。いずれもレコード型(またはそのフィールド)にのみ指定できます。 Id 主キーに対応するフィールドに指定。採番方法を設定できる Version 楽観的排他制御のためのバージョン番号に対応するフィールドに指定。現状は数値…

Soma 0.1.0.1 リリース

F#に特化したO/Rマッパー Soma 0.1.0.1をリリースしました。 http://soma.codeplex.com/ ドキュメントはまだほとんどないのですが、codeplexのHomeにはCRUDのサンプルを載せました。とりあえずはイメージをつかんで貰えればなぁと思います。機能的には、当初…

Soma 0.1.0.1 のクエリ機能の紹介

Somaは「Sql Oriented MApping framework」のアクロニムです。というわけでSQLを柔軟に発行できるのがアピールポイントです。今日はSomaの中心機能であるクエリ機能を紹介したいと思います。SQLはS2Daoに由来する2 Way SQL(SQL文字列をそのままツールで実行…

Somaの適用レイヤについて

SomaのDbモジュールはService層とかBusinessLogic層とか呼ばれるレイヤでは呼び出さず、DAOとかRepositoryに相当するレイヤから利用するのがいいと思います。たとえば、次のような関数の実装として利用するのがいいのではと思います。 パラメータを個別に渡…

.NETのO/RマッパーSomaを作り変え中

C#で作っていたのですが、F#が面白いのでF#で作り直すことにしました。Somaは、SQLやSQLに埋め込まれた簡易的な式言語をパースしたりするんですが、C#では正規表現をつかって何とかしてました。F#ではこのあたりの処理にF# PowerPackのfsyaccとfslexを使える…

最近のSoma

ちょっとずつ作っているEntity Framework拡張のO/RマッパーSoma(http://soma.codeplex.com/)ですが、更新系SQLの生成をEntity Frameworkにまかせるのをやめました。マッピングの定義はedmxにあるのでパースして自前でSQLを組み立てることにしました。理由…

Soma 0.0.4.0 に向けて

いま持っているアイデア。 SQLの実行前後をEventでフックできるようにする パフォーマンスを向上させる(リフレクションやSQLの解析結果のキャッシュとか) 例外的な状況の精査 Tips集

Soma 0.0.3.0 リリース

Entity Frameworkを使いやすくするO/Rマッパー Soma 0.0.3.0をリリースしました。 http://soma.codeplex.com/releases/view/50678今回のポイントは、セットアップがとても簡単になったことです。これまで、edmxファイルをビルドイベントで書き換えたり、専用…

Entity Frameworkの不便なところ

バージョン番号の自動インクリメント 楽観的排他制御のためにWHERE句に特定のカラムを条件として入れる機能はありますが、「バージョン番号」という考え方がないんですね。したがって、バージョン番号を自動でインクリメントする機能もありません。 これは不…

1メソッド1SQLの原則

Soma 0.0.2.0では、Repositoryのメソッドを呼び出した場合に複数のSQLが自動で実行される場合があります。たとえば、DepartmentにEmployeeを関連付けてDepartmentをINSERTする場合が当てはまります。 var departmentRepository = new DepartmentRepository()…

Soma 0.0.2.0 リリース

ADO.NET Entity Frameworkを使いやすくするO/RマッパーSoma 0.0.2.0をリリースしました。 http://soma.codeplex.com/releases/view/50010 今回の目玉はドキュメントです。スクリーンショットをできるだけ使ってわかりやすくしてみました。 http://soma.codep…

最近のSoma

ドキュメント書いたり、機能改善したりしています。ドキュメントはまだ道半ばですが、「クイックスタート」と「SQLファイル」の項目はほぼほぼ終わり。 http://soma.codeplex.com/documentation 機能改善は細かいものをいくつかやりました。 Entity Framewor…

Visual Studioで2 Way SQLが扱いやすい

Management Studioが入っているからなのかわからないですが、Visual Studio 2010で拡張子が.sqlのファイルを開くとエディタでSQLを補完したり、エディタからSQLを実行できますね(Management Studioの機能をつかっているみたい)。前のバージョンからそうな…

SQLのログハンドリングについて

SQLのログって自由にハンドリングしたいですよね。 Somaではこんなインタフェースを用意しました。 public interface ILogger { void LogBeforeExecution(LogContext logContext); void LogAfterExecution(LogContext logContext); } LogBeforeExecutionはSQ…

Repositoryパターン(aka DAOパターン)について

SomaではRepositoryパターンは必須というわけではないですが、推奨しています。 次のような抽象クラスを提供しています(メソッドとコンストラクタはシグネチャだけを表示)。 public abstract class RepositoryBase<TObjectContext, TEntity> where TObjectContext: ObjectContext wh</tobjectcontext,>…

Soma 1stリリース

.NET Framework用O/Rマッパー? Soma 0.0.1.0 をリリースしました。 マッピングするところはADO.NET Entity FrameworkにおまかせなのでO/Rマッパーというと語弊があるかなぁ。どんなものかはプロジェクトの概要(http://soma.codeplex.com/)に書きましたが、…

SQLのログ出力できた

Soma(http://soma.codeplex.com/)でSQLのログ出力を実装できました。 たとえばこんなコードを記述すると using (var context = new SampleEntities()) { context.Employee.Where(e => e.Id > 1).ToList(); Console.WriteLine("------------"); context.Exe…

Repository

Entity FrameworkのサンプルだとDaoじゃなくてRepositoryのほうが多い気がするのでDBアクセスを行うクラスをRepositoryと呼ぶことにします。自分の中ではどっちもおんなじですけど。アプリでつくるRepositoryはこんな感じになります。 public class Employee…

SQLの管理

SQLの管理ですが、リソースファイル(resxファイル)を使うのがいいんじゃないかと考えています。いままで試したことがなかったのですが、リソースファイルでは文字列や画像だけでなくテキストファイルを管理できるのでこれが使えるんじゃないかと。 リソース…

SQLのログ

Somaは、Entity Frameworkをベースにしたフレームワークにすることにしました。PostSharpを使うのは見送り。O/Rマッパーには必須と思われるSQLのログを出力する機能がEntity Frameworkにはないので、プロバイダーをラップしてSQLが実行される直前でログ出力…