「Fluent NHibernate/フルーエントマッピング」の版間の差分
ナビゲーションに移動
検索に移動
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();
}
}
}
関連項目
参考文献