「Fluent NHibernate/フルーエントマッピング」の版間の差分

提供: MonoBook
ナビゲーションに移動 検索に移動
imported>Administrator
imported>Administrator
 
(同じ利用者による、間の10版が非表示)
8行目: 8行目:
 
=== エンティティを作る ===
 
=== エンティティを作る ===
 
まずエンティティとなるクラスを作る。
 
まずエンティティとなるクラスを作る。
 +
 +
[[アプリケーション]]を作る[[プログラマー]]が直接操作するのはエンティティクラスとなる。
 +
この[[アプリケーション]]を作る[[プログラマー]]がエンティティクラスをゴニョゴニョすることで、一般的なSELECT/UPDATE/INSERT/DELETE(俗にいう[[CRUD]])などのDB操作を実現することになる。
  
 
プロジェクトの中に「Entities」というディレクトリを作り、その中に格納しておくとわかりやすいと思う。
 
プロジェクトの中に「Entities」というディレクトリを作り、その中に格納しておくとわかりやすいと思う。
23行目: 26行目:
 
次にマッピングを記述するクラスを作る。
 
次にマッピングを記述するクラスを作る。
 
マッピングクラスはClassMap<>クラスを継承して作る。
 
マッピングクラスはClassMap<>クラスを継承して作る。
 +
 +
マッピングクラスは、Fluent NHibernateがエンティティがどういう設定かを記述するクラスであり、エンティティを利用する[[プログラマー]]が直接参照するようなものではない。
  
 
[[Fluent NHibernate]]の99%は、このマッピングクラスの記述方法を覚えることだと思われる。
 
[[Fluent NHibernate]]の99%は、このマッピングクラスの記述方法を覚えることだと思われる。
47行目: 52行目:
 
=== アプリを作る ===
 
=== アプリを作る ===
 
次に実際にアプリケーションを作る。
 
次に実際にアプリケーションを作る。
 +
 +
Mappingの中身がFluentMappingsとなっているのが特徴。
 +
オートマッピングの場合はAutoMappingsとなっていた部分である。
  
 
<source lang="csharp">
 
<source lang="csharp">
87行目: 95行目:
 
</source>
 
</source>
  
== 応用 ==
+
== 基本 ==
 +
=== Id ===
 +
プライマリーキーとなる。
 +
 
 +
=== Map ===
 +
プロパティとマッピングする。
 +
 
 +
=== References ===
 +
多対1(many to one)を表す。
 +
 
 +
=== HasMany ===
 +
1対多(one to many)を表す。
 +
 
 +
=== HasManyToMany ===
 +
多対多(many to many)を表す。
 +
 
 +
=== HasOne ===
 +
1対1(one to one)を表す。
 +
 
 +
== 応用、その他 ==
 
* [[Fluent NHibernate/フルーエントマッピング/自己参照]]
 
* [[Fluent NHibernate/フルーエントマッピング/自己参照]]
 +
* [[Fluent NHibernate/フルーエントマッピング/複合主キー]]
 +
* [[Fluent NHibernate/フルーエントマッピング/オートインクリメント]]
 +
* [[Fluent NHibernate/フルーエントマッピング/テキスト長]]
 +
* [[Fluent NHibernate/フルーエントマッピング/日付型]]
 +
* [[Fluent NHibernate/フルーエントマッピング/列挙型]]
 +
* [[Fluent NHibernate/フルーエントマッピング/NOT NULL]]
  
 
<!--
 
<!--
99行目: 132行目:
 
</source>
 
</source>
 
-->
 
-->
 +
 
== 関連項目 ==
 
== 関連項目 ==
 
* [[Fluent NHibernate]]
 
* [[Fluent NHibernate]]

2012年7月12日 (木) 09:07時点における最新版

Fluent NHibernateではオートマッピングに加えフルーエントマッピング(fluent mappings)という手動マッピング機能を用意している。NHibernateと違い、マッピング設定にXMLファイルではなくC#ソースコードを用いるというFluent NHibernateの主目的ともいえる機能である。

他サイトのサンプルを見る限り、大半の人はオートマッピングよりも細かく設定できるこちらを使っているようだ。 細かく設定できる分、相当難しい。 日本語の情報もほとんどない。

超入門[編集 | ソースを編集]

エンティティを作る[編集 | ソースを編集]

まずエンティティとなるクラスを作る。

アプリケーションを作るプログラマーが直接操作するのはエンティティクラスとなる。 このアプリケーションを作るプログラマーがエンティティクラスをゴニョゴニョすることで、一般的なSELECT/UPDATE/INSERT/DELETE(俗にいうCRUD)などのDB操作を実現することになる。

プロジェクトの中に「Entities」というディレクトリを作り、その中に格納しておくとわかりやすいと思う。

// 従業員エンティティクラス
public class Employee
{
    public virtual int Id { get; set; }
    public virtual string FirstName { get; set; }
    public virtual string LastName { get; set; }
}

マッピングを作る[編集 | ソースを編集]

次にマッピングを記述するクラスを作る。 マッピングクラスはClassMap<>クラスを継承して作る。

マッピングクラスは、Fluent NHibernateがエンティティがどういう設定かを記述するクラスであり、エンティティを利用するプログラマーが直接参照するようなものではない。

Fluent NHibernateの99%は、このマッピングクラスの記述方法を覚えることだと思われる。 まったく理解は出来ていない。

プロジェクト内に「Mappings」というディレクトリを作り、その中に格納しておくとわかりやすいと思う。

// 従業員マッピングクラス
public class EmployeeMap : ClassMap<Employee>
{
    // デフォルトコンストラクタ
    // この中でマッピングの詳細を記述する。
    public EmployeeMap()
    {
        // プライマリキー
        Id(x => x.Id);
        // 普通のマッピング
        Map(x => x.FirstName);
        Map(x => x.LastName);
    }
}

アプリを作る[編集 | ソースを編集]

次に実際にアプリケーションを作る。

Mappingの中身がFluentMappingsとなっているのが特徴。 オートマッピングの場合はAutoMappingsとなっていた部分である。

class AppMain
{
    public static void Main(string[] args)
    {
        var config = Fluently.Configure()
            // 接続設定
            .Database(
                SQLiteConfiguration.Standard
                    .UsingFile("firstProject.db")
            )
            // マッピングのありかを明示する。
            // 適当なクラスを指定すると、そのクラスが属するアセンブリ内の
            // マッピングクラスを自動検知して、あとは全自動でやってくれる。
            .Mappings(map =>
                map.FluentMappings.AddFromAssemblyOf<AppMain>())
            // マッピングからスキーマを自動生成する。
            .ExposeConfiguration(cfg => 
                new SchemaExport(cfg).Create(false, true))
            ;

        var factory = config.BuildSessionFactory();

        // 実際に使ってみる
        using (var session = factory.OpenSession())
        using (var transaction = session.BeginTransaction())
        {
            // insertしてみる
            var emp = new Expolyee();
            emp.FirstName = "test";
            emp.LastName  = "tarou";
            session.SaveOrUpdate(emp);

            transaction.Commit();
        }
    }
}

基本[編集 | ソースを編集]

Id[編集 | ソースを編集]

プライマリーキーとなる。

Map[編集 | ソースを編集]

プロパティとマッピングする。

References[編集 | ソースを編集]

多対1(many to one)を表す。

HasMany[編集 | ソースを編集]

1対多(one to many)を表す。

HasManyToMany[編集 | ソースを編集]

多対多(many to many)を表す。

HasOne[編集 | ソースを編集]

1対1(one to one)を表す。

応用、その他[編集 | ソースを編集]


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

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


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