私のフォローアップとして 前の質問 。私はASP.NETプログラマーであり、NHibernateが他の方法よりも簡単かつ迅速に私の仕事を終わらせるのにどのように役立つか疑問に思っています。 NHibernateについて何も知らないふりをします。それは何ですか、そして私にとって何ができますか?
NHibernateはORM、またはオブジェクトリレーショナルマッパーです。 LINQ to SQL、Entity Framework、LLBLGenなどと同じように、ORMツールは、ビジネスオブジェクトの共通データアクセス(CRUD)を処理するためのストアドプロシージャを記述する必要性のほとんどを排除します。 ORMツールでは、オブジェクトのどのプロパティがデータベースのテーブルやビューのどの列にマップされるかを追跡するマッピング仕様を(手動で、またはビジュアルデザイナーを使用して...選択したものによって異なります)作成する必要があります。オブジェクトを取得する必要がある場合、ORMツールは適切なSQLを生成してデータベースに送信します。オブジェクトを更新する時期になると、ORMは挿入、更新、削除するSQLを作成するだけでなく、それらのコマンドをバッチ処理して、単一の接続とコマンドのバッチがデータベースに送信され、トランザクションですべてを実行します。 ORMツールを使用すると、オブジェクトグラフ全体を一度に選択できるため、クエリの効率が向上し、タスクに対して最も効率的なSQLが生成されます。
ORMツールでもクエリを実行する必要がありますが、ORMのコンテキストオブジェクトまたはセッションオブジェクトの基本メソッドを使用するか、そのORMのカスタムクエリ言語を使用します。最近では、NHibernateを含むほとんどのORMもLINQサポートを提供しており、標準のLINQ構文を使用してオブジェクトモデルをクエリできます。オブジェクトモデルは、データベースに対するSQLクエリに変換されます。
ORマッパーの利点は、ドメインとストアドプロシージャに分割するのではなく、コードのほぼすべてをドメインに集中化できることです。データベースへのストアドプロシージャの負荷を軽減し、必要が生じた場合にデータベースをリファクタリングする際の障壁となり、ドメインだけでなくデータベーススキーマでもビジネスの俊敏性が向上します。SQLを記述する必要がないため、特にLINQを使用する場合は、より少ない労力でより効率的なアプリケーションを維持し、長期のメンテナンスコストを削減します。
DBAとの避けられない戦争(ある場合)とは別に、ORマッパーは、実装の労力を削減し、保守性を向上させ、ビジネスの俊敏性を高めることができるという利点をテーブルにもたらします。
それが質問に答えることを願っています。 ;)
良い紹介とチュートリアルはここにあります Summer of NHibernate Screencasts 。
各ビデオで、彼はnHibernateのトピックの紹介を提供し、さまざまなことを行う方法を説明しながらいくつかのコードに飛び込みます。私はそれがとても役に立ちました。
マニングにはかなり良い本があります: NHibernate In Action
この本はNHibernateバージョン1.2に関するものですが、そのほとんどは最新バージョンに適用できます。
NHibernateはORM(オブジェクトリレーショナルマッパー)ツールです。データベーススキーマに基づいてオブジェクト指向モデルを作成します。
https://www.hibernate.org/343.html から
NHibernateの主な機能:
ナチュラルプログラミングモデル-NHibernateは、ナチュラルOOイディオム、継承、ポリモーフィズム、構成、および.NETコレクションフレームワークをサポートします。ジェネリックコレクション。
ネイティブ.NET-NHibernate APIは.NET規則とイディオムを使用します
きめの細かいオブジェクトモデルのサポート-コレクションと依存オブジェクトの豊富なマッピング
ビルド時のバイトコードの機能強化なし-ビルド手順に余分なコード生成やバイトコード処理ステップはありません
クエリオプション-NHibernateは問題の両側に対処します。オブジェクトをデータベースに入れる方法だけでなく、オブジェクトを再び取り出す方法も
カスタムSQL-NHibernateがオブジェクトを永続化するために使用する正確なSQLを指定します。ストアドプロシージャは、Microsoft SQL Serverでサポートされています。
「会話」のサポート-NHibernateは、存続期間の長い永続化コンテキスト、オブジェクトのデタッチ/再アタッチをサポートし、楽観的ロックを自動的に処理します
フリー/オープンソース-NHibernateはLGPLでライセンスされています(Lesser GNU Public License)