「Fluent NHibernate」を編集中

ナビゲーションに移動 検索に移動

警告: ログインしていません。編集を行うと、あなたの IP アドレスが公開されます。ログインまたはアカウントを作成すれば、あなたの編集はその利用者名とともに表示されるほか、その他の利点もあります。

この編集を取り消せます。 下記の差分を確認して、本当に取り消していいか検証してください。よろしければ変更を保存して取り消しを完了してください。

最新版 編集中の文章
1行目: 1行目:
'''Fluent NHibernate'''(読み:ふるーえんと・えぬはいばねーと)とは、[[.NET Framework]]向けの[[ORM]]のひとつである[[NHibernate]]の[[ラッパーライブラリ]]である。
+
'''Fluent NHibernate'''(ふるーえんと・えぬはいばねーと)とは、[[.NET Framework]]向けの[[ORM]]のひとつである[[NHibernate]]の[[ラッパーライブラリ]]である。
  
 
== 概要 ==
 
== 概要 ==
Fluentは日本語で「流暢な」や「さくさく」という意味であり、直訳すると「さくさくハイバネート」となる。
+
[[NHibernate]]では[[データベース]]の接続設定やマッピングを記述するのに[[XML]]を用いる。一方、Fluent NHibernateではXMLの代わりに[[C Sharp|C#]]による[[プログラム]]でそれらを記述する。
似たような言い回しには以下のようなものがある。
 
* [[たのしい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を動的に解析するのに比べ、実行前に[[コンパイラ]]による最低限の記述ミスのチェックを行え、より安全性が高まるという利点がある。
26行目: 14行目:
  
 
== 使い方 ==
 
== 使い方 ==
* [[Fluent NHibernate/データベース接続設定]]
+
=== データベース接続設定 ===
* [[Fluent NHibernate/オートマッピング]] - 自動マッピング
+
Fluent NHibernateには各種データベースの接続用ドライバーも含まれているので、大半のデータベースは接続設定だけすれば動く。
* [[Fluent NHibernate/フルーエントマッピング]] - 手動マッピング。Fluent NHibernateの核となる機能である。
+
 
 +
==== MySQL ====
 +
[[MySQL]]の接続設定の例を示す。
 +
 
 +
なお、この例ではホスト名やユーザー名、パスワードなどのMySQL接続設定は[[アプリケーション構成ファイル]]のConnectionStringsに記載されたものを使う。
 +
<source lang="csharp">
 +
using FluentNHibernate;
 +
using FluentNHibernate.Cfg;
 +
using FluentNHibernate.Cfg.Db;
 +
using NHibernate;
 +
using NHibernate.Tool.hbm2ddl;
 +
 
 +
public class SampleApp
 +
{
 +
    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">
 +
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の主目的ともいえる機能である。他サイトのサンプルを見る限り、大半の人はオートマッピングよりも細かく設定できるこちらを使っているようだ。
  
なお、[[クエリ]]などの部分はほぼ[[NHibernate]]そのものを使うことになる。
+
オートマッピングの記述例のAutoMappingsの部分がFluentMappingsになるような感じ。
よってそれらの使い方は「[[NHibernate]]」の項目を参照。
+
<source lang="csharp">
 +
                .Mappings(map => map.FluentMappings
 +
                    .AddFromAssemblyOf<Product>()
 +
                )
 +
</source>
  
 
{{stub}}
 
{{stub}}
 
== 便利ツール ==
 
* [[Visual NHibernate]] - ER図などを用いてビジュアルにマッピングを書ける商用ソフト。
 
  
 
== 関連項目 ==
 
== 関連項目 ==
44行目: 137行目:
  
 
== 参考文献 ==
 
== 参考文献 ==
{{reflist}}
+
<references/>
  
 
== 外部リンク ==
 
== 外部リンク ==

MonoBookへの投稿はすべて、他の投稿者によって編集、変更、除去される場合があります。 自分が書いたものが他の人に容赦なく編集されるのを望まない場合は、ここに投稿しないでください。
また、投稿するのは、自分で書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください(詳細はMonoBook:著作権を参照)。 著作権保護されている作品は、許諾なしに投稿しないでください!

このページを編集するには、下記の確認用の質問に回答してください (詳細):

取り消し 編集の仕方 (新しいウィンドウで開きます)

このページで使用されているテンプレート:

このページは 1 個の隠しカテゴリに属しています: