NHibernate-概要
この章では、NHibernateとは何か、実装できるすべてのプラットフォーム、その利点、およびそれに関連するその他の側面について説明します。
NHibernateとは何ですか?
NHibernateは、.NETFramework用の成熟したオープンソースのオブジェクトリレーショナルマッパーです。それは積極的に開発され、完全に機能し、何千もの成功したプロジェクトで使用されています。それは上に構築されていますADO.NET 現在のバージョンは NHibernate 4.0.4.
NHibernateはオープンソースの.NETオブジェクトリレーショナルマッパーであり、 GNU Lesser General Public License。
これは、人気のあるJavaオブジェクトリレーショナルマッパーであるHibernateに基づいており、非常に成熟したアクティブなコードベースを備えています。
これは、オブジェクト指向ドメインモデルを従来のリレーショナルデータベースにマッピングするためのフレームワークを提供します。
NHibernateはによって開始されました Tom Barrett そしてこのプロジェクトは、彼らの最初のコミットである2003年2月から始まっています。
これは大きなプロジェクトであり、多くの機能を提供します。
あります NuGet package 利用可能で、プロジェクトへの追加が非常に簡単になります。
なぜNHibernate?
さて、問題はなぜ必要なのかということです object-relational mappers? これは、オブジェクトの世界とリレーショナルの世界の間に断絶があるためです。
オブジェクトの世界では、すべてが objects; 私たちはオブジェクトを私たちのデータを持つものと呼びました。
リレーショナルワールドはすべてセットベースであり、オブジェクトワールドとは異なるテーブルと行を処理しています。
オブジェクトの世界では、 unidirectional associations。顧客が注文へのポインタを持っている場合、それは必ずしも注文が顧客へのポインタを持っていることを意味するわけではなく、そうでない場合もあります。
リレーショナルの世界では、すべての関連付けは bidirectional そしてそれは外部キーによって行うことができます。
すべての関連付けは本質的に双方向であるため、オブジェクトリレーショナルマッピングを処理する場合は、この切断も処理する必要があります。
オブジェクトの世界では、単方向のポインターを使用していますが、リレーショナルの世界では、本質的に双方向の外部キーを使用しています。
オブジェクトの世界にはこの継承の概念があり、車両はさまざまなサブクラスを持つことができます。つまり、車は車両の一種であり、ボートは車両の一種であり、スポーツカーは自動車の一種です。継承関係。
リレーショナル世界には、この継承の概念はありません。
マッピング
では、これらすべてをどのようにマッピングするのでしょうか disjoint relationships?このマッピングの概念は、オブジェクトリレーショナルマッパーに由来します。次の図に示すように、理解すべきことは主に3つあります。
アプリケーションでは、クラス定義が必要になります。これは通常、C#コードと、Employeeクラス、Customerクラス、Orderクラスなどのクラスを表す.NETコードです。
下部に、データベーススキーマが表示されます。これは Data Definition Language 顧客テーブルがどのように見えるか、従業員テーブルがどのように見えるかを指定するリレーショナルデータベース内。
これらの間に、行と列、および外部キーの関係に関して、C#のオブジェクトワールドからデータベースワールドに変換する方法をオブジェクトリレーショナルマッパーに指示するマッピングメタデータがあります。
このマッピングメタデータはさまざまな方法で表すことができ、NHibernateアプリケーションで最も一般的なこのさまざまな方法をいくつか見ていきます。
それはによって表されます HBM (Hibernate Mapping) XMLファイルであるファイル。
サポートされているデータベース
NHibernateは、さまざまなデータベースをサポートしています。そこにある既存のリレーショナルデータベースはすべてNHibernateにアクセスできます。
SQL Serverは、サポートされている主要なデータベースであり、ほとんどの開発者が開発中に使用しているものであり、おそらく最も一般的なものです。
また works very well with Oracle。
また、DB2、Firebird、MySQL、PostgreSQL、SQLLiteもサポートしています。
それはまた持っています ODBC and OLEDB drivers。