Fluent NHibernateについて のコメント投稿

Fluent NHibernateについて のコメント投稿を行います
ページ下部のフォーム にコメント情報を入力してください

NHibernate

当鯖ではDBにMySQLを使っており、ORマッパーとして Fluent NHibernate を使ってます
だけど、残念なことにFluent NHibernateについて日本語の情報がほとんどありません

需要がないんだろうなぁ( °_°) と思いつつ自分が思うことをいろいろ書いてみます

Fluent NHibernateとは

大本に Hibernate というJavaのORマッパーがあって、これを.NETに移植したものが NHibernate になります
Hibernateはかなり枯れたプロダクト。ですが、歴史がある分動作は安定しています(たぶん)

NHibernateの設定は、ORマッピング定義を含めすべてXMLファイルで作成する必要があります。これがなんとも面倒でその難解さも相まって導入の障害になっていました

これをソースコード上でできるようにしたものがFluent NHibernateです

設定の例

// DB接続のファクトリクラス
private static readonly ISessionFactory _factory;

static DB() {
    // メソッドチェーンで設定
    var config = MySQLConfiguration.Standard
        .ConnectionString(x => x.FromConnectionStringWithKey("DB"))
        .IsolationLevel(IsolationLevel.ReadCommitted);
    _factory = Fluently.Configure().Database(config)
        .Mappings(x => x.FluentMappings.AddFromAssemblyOf<MvcApplication>())
        .BuildSessionFactory();
}


Entity Frameworkを使わない理由

.NETで作成するアプリケーションのORマッパーは公式に Entity Framework が推奨されています
これはWindows鯖(IIS)+SQL Server環境での親和性が非常に高く、機能をフルに使うことが可能です

ですが、当鯖の環境はLinux+Monoです
当初はEntity Frameworkを検討していましたが、どうしてもMono上で実行時にエラーが発生してまともに動きませんでした
ですが、Monoによると 動作します と書かれているので、今思うとやり方がまずかったのかもしれません…?

もう1つの問題としてEntity Frameworkでのトランザクションは TransactionScopeクラス 前提になっていて、TransactionScopeはMono(というかLinux)上では動作しません。正確には MS DTCサービス が稼働している必要があります

無理矢理コネクションを引っ張り出してトランザクションを制御することも可能ですが、スマートではないですね

追記

Entity Framework 6ではすでに TransactionScope は非推奨になってるようです…

実際に使ってみて

正直、安定動作まで持って行くのにかなり大変でした(汗
やはり、日本語のドキュメントがほとんど無いことが致命的です。英語のドキュメントを読む労力が必要です

CakePHPとかFuelPHPのお手軽MVCに慣れているとヒントが少なくてキツいかもしれません
そう考えると選択肢の多いPHPがなんとも魅力的に見えます。ですが、当鯖はLinux+Monoです(意地)

大変なのは設定だけなのでそれさえできればOKですかね。なお、パフォーマンスは あまり良くない 模様…

やる気があれば、Fluent NHibernateの中核であるマッピング機能について書きたいと思います

※必須入力です。32文字以内のテキストを入力してください
プレビュー
※エディタでHTMLが入力できます(一部の端末ではHTMLエディタが使用できません) ※エディタ内の表示内容は実際のものとは異なります。実際の表示内容はプレビューボタンからプレビューできます ※必須入力です。4000文字以内のテキストを入力してください ※その他の入力内容のルールは こちら で確認できます ※画像は以下のフォームからアップロードできます
画像アップロードフォームを表示
※JPEG、PNG、GIF形式の4MBまでの画像がアップロードできます ※ドラッグ&ドロップでもアップロードできます
アップロード
削除
アップロード画像01
画像をドロップ
アップロード
削除
アップロード画像02
画像をドロップ
アップロード
削除
アップロード画像03
画像をドロップ
アップロード
削除
アップロード画像04
画像をドロップ
アップロード
削除
アップロード画像05
画像をドロップ
アップロード
削除
アップロード画像06
画像をドロップ
アップロード
削除
アップロード画像07
画像をドロップ
アップロード
削除
アップロード画像08
画像をドロップ
認証画像の再読込
※必須入力です。全角ひらがなで構成される4文字のテキストを入力してください ※判読しにくい場合は再読み込みしてください