NHibernate-はじめに

この章では、NHibernateを使用して簡単な例を開始する方法を見ていきます。私たちは構築しますsimple console application。コンソールアプリケーションを作成するには、作成する必要のあるすべての機能を含むVisual Studio 2015を使用し、NHibernateパッケージを使用してアプリケーションをテストします。

以下は、VisualStudioで使用可能なプロジェクトテンプレートを使用してプロジェクトを作成する手順です。

Step 1 − Visual Studioを開き、[ファイル]→[新規]→[プロジェクト]メニューオプションをクリックします。

Step 2 −新しいプロジェクトダイアログが開きます。

Step 3 −左側のペインから、[テンプレート]→[Visual C#]→[Windows]を選択します。

Step 4 −中央のペインで、[コンソールアプリケーション]を選択します。

Step 5 −「名前」フィールドにプロジェクト名「NHibernateDemoApp」を入力し、「OK」をクリックして続行します。

Step 6 −プロジェクトがVisual Studioによって作成されると、ソリューションエクスプローラーウィンドウにいくつかのファイルが表示されます。

簡単なコンソールアプリケーションプロジェクトを作成したことをご存知のとおり、コンソールプロジェクトにNHibernateパッケージを含める必要があります。

[ツール]メニューに移動し、[NuGetパッケージマネージャー]→[パッケージマネージャーコンソール]を選択すると、[パッケージマネージャーコンソール]ウィンドウが開きます。

上記のコマンドを指定してください Package Manager ConsoleウィンドウでEnterキーを押すと、すべてのNHibernate依存関係がダウンロードされ、必要なすべてのアセンブリへの参照が作成されます。インストールが完了すると、次の図に示すようなメッセージが表示されます。

NHibernateが追加されたので、実装を開始できます。したがって、非常に単純なマッピングから始めます。table と呼ばれる Student、IDと呼ばれる整数の主キーと、FirstName列とLastName列があります。

この学生を表すクラスが必要なので、ソリューションエクスプローラーでプロジェクトを右クリックし、[追加]→[クラス]を選択して[新しいアイテムの追加]ダイアログボックスを開き、Studentという新しいクラスを作成しましょう。

入る Student.cs名前フィールドで、[追加]ボタンをクリックします。このStudentクラスでは、IDと呼ばれる整数の主キーが必要であり、この文字列を作成する必要があります。FirstName そして LastName 次のStudentクラスの完全な実装に示されているフィールド。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks;

namespace NHibernateDemoApp { 
   
   class Student { 
      public virtual int ID { get; set; } 
      public virtual string LastName { get; set; } 
      public virtual string FirstMidName { get; set; } 
   } 
}

NHibernateアプリケーションでモデルを扱う場合、すべてのフィールドを仮想化するのが最も簡単です。つまり、これは私たちが使用する単純なNHibernateモデルであり、これをバックエンドデータベースにマップします。

次に、ProgramクラスのMainメソッドに移動して、新しいNHibernate構成オブジェクトを作成しましょう。

私たちが最初に提供する必要があるのは connection string。これはデータベース固有の接続文字列であり、接続文字列を見つける最も簡単な方法は、データベースを右クリックすることです。SQL Server Object Explorer [プロパティ]を選択します。

[プロパティ]ウィンドウが開き、下にスクロールすると、[プロパティ]ウィンドウに[接続文字列]フィールドが表示されます。

接続文字列をコピーして、コードで指定します。以下は、NHibernateの構成が必要なMainメソッドの実装です。

using NHibernate.Cfg;
using NHibernate.Dialect;
using NHibernate.Driver;

using System;
using System.Linq;
using System.Reflection;

namespace NHibernateDemoApp {

   class Program {
   
      static void Main(string[] args) {
         var cfg = new Configuration();
			
         String Data Source = asia13797\\sqlexpress;
         String Initial Catalog = NHibernateDemoDB;
         String Integrated Security = True;
         String Connect Timeout = 15;
         String Encrypt = False;
         String TrustServerCertificate = False;
         String ApplicationIntent = ReadWrite;
         String MultiSubnetFailover = False;
			
         cfg.DataBaseIntegration(x = > { x.ConnectionString = "Data Source + 
            Initial Catalog + Integrated Security + Connect Timeout + Encrypt +
            TrustServerCertificate + ApplicationIntent + MultiSubnetFailover";
         
                     
            x.Driver<SqlClientDriver>(); 
            x.Dialect<MsSql2008Dialect>();
         });
         
         cfg.AddAssembly(Assembly.GetExecutingAssembly());
         
         var sefact = cfg.BuildSessionFactory(); 
         
         using (var session = sefact.OpenSession()) {
         
            using (var tx = session.BeginTransaction()) {
               //perform database logic 
               tx.Commit();
            }
            
            Console.ReadLine(); 
         } 
      } 
   } 
}

接続文字列の後に、ドライバーを提供する必要があります。 SQLClientDriver 次に、SQL Serverのバージョンである方言を提供する必要があり、MS SQL2008を使用します。

NHibernateは、データベースに接続する方法を知っています。もう1つ行う必要があるのは、マップするモデルのリストを提供することです。

これは、アセンブリを追加することで実行できるため、 Assembly.GetExecutingAssemblyこれは、プログラムがマッピングファイルを見つける場所です。マッピングファイルは、NHibernateにC#クラスからデータベーステーブルに移動する方法を指示します。

SessionFactoryは、NHibernateの初期化に必要なすべてのメタデータをコンパイルします。SessionFactoryを使用して、データベース接続にほぼ類似したセッションを構築できます。したがって、適切な方法は、usingブロックで使用することです。私は言うことができますvar session 等しい sessionFactory.OpenSession トランザクション内でこれを実行したいと思います。

セッションが開かれると、新しいトランザクションを開始するようにセッションに指示でき、ここでいくつかのロジックを実行できます。したがって、データベースロジックを実行し、最後にそのトランザクションをコミットします。