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

提供: MonoBook
ナビゲーションに移動 検索に移動
imported>Administrator
(ページの作成:「Fluent NHibernateではオートマッピングに加え'''フルーエントマッピング'''(fluent mappings)...」)
 
imported>Administrator
5行目: 5行目:
 
日本語の情報もほとんどない。
 
日本語の情報もほとんどない。
  
== 記述例 ==
+
== 使い方 ==
 +
=== エンティティを作る ===
 +
まずエンティティとなるクラスを作る。
 +
 
 +
プロジェクトの中に「Entities」というディレクトリを作り、その中に格納しておくとわかりやすいと思う。
 +
<class lang="csharp">
 +
// 従業員エンティティクラス
 +
public class Employee
 +
{
 +
    public virtual int Id { get; private set; }
 +
    public virtual string FirstName { get; set; }
 +
    public virtual string LastName { get; set; }
 +
}
 +
</source>
 +
 
 +
=== マッピングを作る ===
 +
次にマッピングを記述するクラスを作る。
 +
マッピングクラスはClassMap<>クラスを継承して作る。
 +
 
 +
プロジェクト内に「Mappings」というディレクトリを作り、その中に格納しておくとわかりやすいと思う。
 +
<source lang="csharp">
 +
// 従業員マッピングクラス
 +
public class EmployeeMap : ClassMap<Employee>
 +
{
 +
    // デフォルトコンストラクタ
 +
    // この中でマッピングの詳細を記述する。
 +
    public EmployeeMap()
 +
    {
 +
        // プライマリキー
 +
        Id(x => x.Id);
 +
        // 普通のマッピング
 +
        Map(x => x.FirstName);
 +
        Map(x => x.LastName);
 +
    }
 +
}
 +
</source>
 +
 
 +
=== アプリを作る ===
 +
次に実際にアプリケーションを作る。
 +
 
 +
<source lang="csharp">
 +
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();
 +
        }
 +
    }
 +
}
 +
</source>
 +
 
 +
<!--
 
{{stub}}
 
{{stub}}
 
大雑把に言えばオートマッピングの記述例のAutoMappingsの部分がFluentMappingsになるような感じである。
 
大雑把に言えばオートマッピングの記述例のAutoMappingsの部分がFluentMappingsになるような感じである。
13行目: 92行目:
 
                 )
 
                 )
 
</source>
 
</source>
 
+
-->
 
== 関連項目 ==
 
== 関連項目 ==
 
* [[Fluent NHibernate]]
 
* [[Fluent NHibernate]]

2012年7月8日 (日) 06:04時点における版

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

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

使い方

エンティティを作る

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

プロジェクトの中に「Entities」というディレクトリを作り、その中に格納しておくとわかりやすいと思う。 <class lang="csharp"> // 従業員エンティティクラス public class Employee {

   public virtual int Id { get; private set; }
   public virtual string FirstName { get; set; }
   public virtual string LastName { get; set; }

} </source>

マッピングを作る

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

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

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

アプリを作る

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

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();
        }
    }
}

関連項目

参考文献


外部リンク