「Fluent NHibernate」の版間の差分

提供: MonoBook
ナビゲーションに移動 検索に移動
imported>Administrator
imported>Fallout New Tokyo
 
(2人の利用者による、間の10版が非表示)
1行目: 1行目:
'''Fluent NHibernate'''(ふるーえんと・えぬはいばねーと)とは、[[.NET Framework]]向けの[[ORM]]のひとつである[[NHibernate]]の[[ラッパーライブラリ]]である。
+
'''Fluent NHibernate'''(読み:ふるーえんと・えぬはいばねーと)とは、[[.NET Framework]]向けの[[ORM]]のひとつである[[NHibernate]]の[[ラッパーライブラリ]]である。
  
 
== 概要 ==
 
== 概要 ==
[[NHibernate]]では[[データベース]]の接続設定やマッピングを記述するのに[[XML]]を用いる。一方、Fluent NHibernateではXMLの代わりに[[C Sharp|C#]]による[[プログラム]]でそれらを記述する。
+
Fluentは日本語で「流暢な」や「さくさく」という意味であり、直訳すると「さくさくハイバネート」となる。
 +
似たような言い回しには以下のようなものがある。
 +
* [[たのしいRuby]]
 +
* [[すごいHaskellたのしく学ぼう!]]
 +
* [[みんなのPython]]
 +
* [[ボクらのScala ~ 次世代Java徹底入門]]
 +
 
 +
[[Hibernate]]および[[NHibernate]]は、よく[[Ruby]]界隈で圧倒的な勢力をもつ[[ActiveRecord]]と比較され、多くの場面でボロクソに言われているのが実情である。しかも、その話題が過熱しすぎると[[ORM]]単体どころか[[Java]]は[[プログラミング言語]]としても劣っている云々という話に飛躍するくらい酷い有様である。
 +
 
 +
そこへ颯爽と登場したのが、指摘されていた問題点を[[C Sharp|C#]]の変態機能を使いまくることで解決しまくった「さくさくハイバネート」である。
 +
 
 +
== 特徴 ==
 +
[[NHibernate]]では[[データベース]]の接続設定やマッピングを記述するのに[[XML]]を用いる。一方、Fluent NHibernateではXMLの代わりに[[C Sharp|C#]][[ソースコード]]でそれらを記述する。
  
 
[[XML]]ではなく[[C Sharp|C#]]の[[ソースコード]]として記述することで、実行時にXMLを動的に解析するのに比べ、実行前に[[コンパイラ]]による最低限の記述ミスのチェックを行え、より安全性が高まるという利点がある。
 
[[XML]]ではなく[[C Sharp|C#]]の[[ソースコード]]として記述することで、実行時にXMLを動的に解析するのに比べ、実行前に[[コンパイラ]]による最低限の記述ミスのチェックを行え、より安全性が高まるという利点がある。
14行目: 26行目:
  
 
== 使い方 ==
 
== 使い方 ==
=== データベース接続設定 ===
+
* [[Fluent NHibernate/データベース接続設定]]
Fluent NHibernateには各種データベースの接続用ドライバーも含まれているので、大半のデータベースは接続設定だけすれば動く。
+
* [[Fluent NHibernate/オートマッピング]] - 自動マッピング
 +
* [[Fluent NHibernate/フルーエントマッピング]] - 手動マッピング。Fluent NHibernateの核となる機能である。
  
==== MySQL ====
 
[[MySQL]]の接続設定の例を示す。
 
  
なお、この例ではホスト名やユーザー名、パスワードなどのMySQL接続設定は[[アプリケーション構成ファイル]]のConnectionStringsに記載されたものを使う。
+
なお、[[クエリ]]などの部分はほぼ[[NHibernate]]そのものを使うことになる。
<source lang="csharp">
+
よってそれらの使い方は「[[NHibernate]]」の項目を参照。
using FluentNHibernate;
 
using FluentNHibernate.Cfg;
 
using FluentNHibernate.Cfg.Db;
 
using NHibernate;
 
using NHibernate.Tool.hbm2ddl;
 
  
public class SampleApp
+
{{stub}}
{
 
    public void Main(string[] args)
 
    {
 
        // MySQLの場合
 
        var dbConfig = MySQLConfiguration
 
            .Standard
 
            .ConnectionString(cs => cs.FromConnectionStringWithKey("db"))
 
            ;
 
        // 多くのサンプルでは↑と↓をメソッドチェーンで合体させて記述してあることが多い。
 
        // そのような書き方は個人的にはあまり好きではない。
 
        var fnConfig = Fluently.Configure()
 
            .Database(dbConfig)
 
            ;
 
        var factory = fnConfig.BuildSessionFactory();
 
    }
 
}
 
</source>
 
 
 
あまりお勧めできる方法ではないが、[[アプリケーション構成ファイル]]ではなく、[[MySQL]]の接続設定を直接[[ソースコード]]に埋め込む方法もある。
 
独自の設定ファイルを用いる場合にはこの方法を使うのもありかもしれない。
 
<source lang="csharp">
 
var dbConfig = MySQLConfiguration
 
    .Standard
 
    .ConnectionString(cs => cs
 
        .Server("127.0.0.1")
 
        .Username("user_name")
 
        .Password("pasword")
 
        .Database("database_name")
 
    )
 
)
 
</source>
 
 
 
==== SQLite ====
 
[[SQLite]]の接続設定。
 
Fluent NHibernateの公式サイトにあるサンプルはほぼSQLiteを使用しているので、公式サイトを見て回った方が早いかもしれない。
 
<source lang="csharp">
 
var dbConfig = SQLiteConfiguration
 
    .Standard
 
    .UsingFile("firstProject.db") // SQLiteファイルのパスを指定する。
 
</source>
 
 
 
=== オートマッピング(自動マッピング) ===
 
Fluent NHibernateにはオートマッピング(auto mappings)という、プログラマが書いたエンティティ(クラス)から自動的にリレーショナルデータベース上にテーブルなどを生成する機能がある。
 
  
==== 例 ====
+
== 便利ツール ==
<source lang="csharp">
+
* [[Visual NHibernate]] - ER図などを用いてビジュアルにマッピングを書ける商用ソフト。
public class Product
 
{
 
    public virtual int Id { get; set; }
 
    public virtual string Name { get; set; }
 
    public virtual decimal Price { get; set; }
 
}
 
 
 
public class Shelf
 
{
 
    public virtual int Id { get;  set; }
 
    public virtual IList<Product> Products { get; set; }
 
 
 
    public Shelf()
 
    {
 
        Products = new List<Product>();
 
    }
 
}
 
</source>
 
 
 
上記のようなクラス群があるとして、Fluent NHibernateの接続設定を以下のように記述し、実行すると、データベースへの初回接続時にクラスに対応するテーブルなどを自動生成しようと試みる。何かしらの理由で生成に失敗した場合は例外が発生する。
 
<source lang="csharp">
 
using FluentNHibernate;
 
using FluentNHibernate.Cfg;
 
using FluentNHibernate.Cfg.Db;
 
using FluentNHibernate.Automapping;
 
using NHibernate;
 
using NHibernate.Tool.hbm2ddl;
 
 
 
public class SampleApp
 
{
 
    public void Main(string[] args)
 
    {
 
        // MySQLの場合
 
        var fnConfig = Fluently.Configure()
 
            .Database(/* 接続設定 */)
 
            .Mappings(map =>
 
                map.AutoMappings.Add(AutoMap.AssemblyOf<Product>())
 
            )
 
            ;
 
        var factory = fnConfig.BuildSessionFactory();
 
    }
 
</source>
 
 
 
=== フルーエントマッピング(手動マッピング) ===
 
Fluent NHibernateではオートマッピングに加えフルーエントマッピング(fluent mappings)という手動マッピング機能を用意している。
 
 
 
マッピング設定にXMLファイルではなくC#のソースコードを用いるというFluent NHibernateの主目的ともいえる機能である。他サイトのサンプルを見る限り、大半の人はオートマッピングよりも細かく設定できるこちらを使っているようだ。
 
 
 
{{stub}}
 
  
 
== 関連項目 ==
 
== 関連項目 ==
130行目: 44行目:
  
 
== 参考文献 ==
 
== 参考文献 ==
<references/>
+
{{reflist}}
  
 
== 外部リンク ==
 
== 外部リンク ==

2014年3月3日 (月) 05:46時点における最新版

Fluent NHibernate(読み:ふるーえんと・えぬはいばねーと)とは、.NET Framework向けのORMのひとつであるNHibernateラッパーライブラリである。

概要[編集 | ソースを編集]

Fluentは日本語で「流暢な」や「さくさく」という意味であり、直訳すると「さくさくハイバネート」となる。 似たような言い回しには以下のようなものがある。

HibernateおよびNHibernateは、よくRuby界隈で圧倒的な勢力をもつActiveRecordと比較され、多くの場面でボロクソに言われているのが実情である。しかも、その話題が過熱しすぎるとORM単体どころかJavaプログラミング言語としても劣っている云々という話に飛躍するくらい酷い有様である。

そこへ颯爽と登場したのが、指摘されていた問題点をC#の変態機能を使いまくることで解決しまくった「さくさくハイバネート」である。

特徴[編集 | ソースを編集]

NHibernateではデータベースの接続設定やマッピングを記述するのにXMLを用いる。一方、Fluent NHibernateではXMLの代わりにC#ソースコードでそれらを記述する。

XMLではなくC#ソースコードとして記述することで、実行時にXMLを動的に解析するのに比べ、実行前にコンパイラによる最低限の記述ミスのチェックを行え、より安全性が高まるという利点がある。

また、Visual StudioMonoDevelopなどの統合開発環境を使用することでインテリセンスなどの入力補完なども使えるため、シンタックスエラーなどの些細な記述ミスによるバグを抑制することができる。

さらにFluent NHibernateでは、Rubyなどでよく使われるActive Recordのようにマッピングクラスに基づき、それらに対応するデータベース上のテーブルの自動生成するオートマッピング機能を備えている。Fluent NHibernateのオートマッピング機能では、マッピングクラスを個別に明示し生成することも、.NET Frameworkアセンブリを指定することで、そのアセンブリの中で使われているマッピングクラスを自動認識させ、そこから一気に自動生成を行うこともできるようになっている。

インストール[編集 | ソースを編集]

Visual Studioを用いている場合はNuGetを使うことで、Fluent NHibernateおよびNHibernateなどの依存するその他のライブラリも一括でインストールできるので便利である。[1]

使い方[編集 | ソースを編集]


なお、クエリなどの部分はほぼNHibernateそのものを使うことになる。 よってそれらの使い方は「NHibernate」の項目を参照。


便利ツール[編集 | ソースを編集]

  • Visual NHibernate - ER図などを用いてビジュアルにマッピングを書ける商用ソフト。

関連項目[編集 | ソースを編集]

参考文献[編集 | ソースを編集]

外部リンク[編集 | ソースを編集]