「Fluent NHibernate/フルーエントマッピング」の版間の差分
imported>Administrator |
imported>Administrator (→応用、その他) |
||
(同じ利用者による、間の12版が非表示) | |||
5行目: | 5行目: | ||
日本語の情報もほとんどない。 | 日本語の情報もほとんどない。 | ||
− | == | + | == 超入門 == |
=== エンティティを作る === | === エンティティを作る === | ||
まずエンティティとなるクラスを作る。 | まずエンティティとなるクラスを作る。 | ||
+ | |||
+ | [[アプリケーション]]を作る[[プログラマー]]が直接操作するのはエンティティクラスとなる。 | ||
+ | この[[アプリケーション]]を作る[[プログラマー]]がエンティティクラスをゴニョゴニョすることで、一般的な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"> | ||
86行目: | 94行目: | ||
} | } | ||
</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/フルーエントマッピング/NOT NULL]] | ||
<!-- | <!-- | ||
96行目: | 132行目: | ||
</source> | </source> | ||
--> | --> | ||
+ | |||
== 関連項目 == | == 関連項目 == | ||
* [[Fluent NHibernate]] | * [[Fluent NHibernate]] | ||
+ | * [[Fluent NHibernate/データベース接続設定]] | ||
* [[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)を表す。
応用、その他[編集 | ソースを編集]
- Fluent NHibernate/フルーエントマッピング/自己参照
- Fluent NHibernate/フルーエントマッピング/複合主キー
- Fluent NHibernate/フルーエントマッピング/オートインクリメント
- Fluent NHibernate/フルーエントマッピング/テキスト長
- Fluent NHibernate/フルーエントマッピング/日付型
- Fluent NHibernate/フルーエントマッピング/列挙型
- Fluent NHibernate/フルーエントマッピング/NOT NULL
関連項目[編集 | ソースを編集]
参考文献[編集 | ソースを編集]