「Fluent NHibernate/フルーエントマッピング」の版間の差分
imported>Administrator ページの作成:「Fluent NHibernateではオートマッピングに加え'''フルーエントマッピング'''(fluent mappings)...」 |
imported>Administrator |
||
| (同じ利用者による、間の16版が非表示) | |||
| 5行目: | 5行目: | ||
日本語の情報もほとんどない。 | 日本語の情報もほとんどない。 | ||
== | == 超入門 == | ||
=== エンティティを作る === | |||
まずエンティティとなるクラスを作る。 | |||
[[アプリケーション]]を作る[[プログラマー]]が直接操作するのはエンティティクラスとなる。 | |||
この[[アプリケーション]]を作る[[プログラマー]]がエンティティクラスをゴニョゴニョすることで、一般的なSELECT/UPDATE/INSERT/DELETE(俗にいう[[CRUD]])などのDB操作を実現することになる。 | |||
プロジェクトの中に「Entities」というディレクトリを作り、その中に格納しておくとわかりやすいと思う。 | |||
<source lang="csharp"> | |||
// 従業員エンティティクラス | |||
public class Employee | |||
{ | |||
public virtual int Id { get; set; } | |||
public virtual string FirstName { get; set; } | |||
public virtual string LastName { get; set; } | |||
} | |||
</source> | |||
=== マッピングを作る === | |||
次にマッピングを記述するクラスを作る。 | |||
マッピングクラスはClassMap<>クラスを継承して作る。 | |||
マッピングクラスは、Fluent NHibernateがエンティティがどういう設定かを記述するクラスであり、エンティティを利用する[[プログラマー]]が直接参照するようなものではない。 | |||
[[Fluent NHibernate]]の99%は、このマッピングクラスの記述方法を覚えることだと思われる。 | |||
まったく理解は出来ていない。 | |||
プロジェクト内に「Mappings」というディレクトリを作り、その中に格納しておくとわかりやすいと思う。 | |||
<source lang="csharp"> | |||
// 従業員マッピングクラス | |||
public class EmployeeMap : ClassMap<Employee> | |||
{ | |||
// デフォルトコンストラクタ | |||
// この中でマッピングの詳細を記述する。 | |||
public EmployeeMap() | |||
{ | |||
// プライマリキー | |||
Id(x => x.Id); | |||
// 普通のマッピング | |||
Map(x => x.FirstName); | |||
Map(x => x.LastName); | |||
} | |||
} | |||
</source> | |||
=== アプリを作る === | |||
次に実際にアプリケーションを作る。 | |||
Mappingの中身がFluentMappingsとなっているのが特徴。 | |||
オートマッピングの場合はAutoMappingsとなっていた部分である。 | |||
<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> | |||
== 基本 == | |||
=== 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]] | |||
<!-- | |||
{{stub}} | {{stub}} | ||
大雑把に言えばオートマッピングの記述例のAutoMappingsの部分がFluentMappingsになるような感じである。 | 大雑把に言えばオートマッピングの記述例のAutoMappingsの部分がFluentMappingsになるような感じである。 | ||
| 13行目: | 131行目: | ||
) | ) | ||
</source> | </source> | ||
--> | |||
== 関連項目 == | == 関連項目 == | ||
* [[Fluent NHibernate]] | * [[Fluent NHibernate]] | ||
* [[Fluent NHibernate/データベース接続設定]] | |||
* [[Fluent NHibernate/オートマッピング]] | * [[Fluent NHibernate/オートマッピング]] | ||