.NET ヘルプ

NHibernate C#(開発者向けの動作方法)

更新済み 6月 6, 2024
共有:

NHibernate C# (開発者向けの動作方法): 図1 - NHibernate C#のホームページ

NHibernate オブジェクトリレーショナルマッピング(Object Relational Mapping)の強力な (ORM (オブジェクト関係マッピング)) .NETフレームワークで使用するために設計されたフレームワーク。 それは開発者に、.NETアプリケーションのオブジェクト指向の世界とデータベースのリレーショナルな世界を効率的に結び付ける方法を提供します。 NHibernateを使用することで、データアクセス層を実装するために必要なボイラープレートコードの量を大幅に削減でき、.NETアプリケーションがよりクリーンで保守しやすくなります。

データベース操作を簡素化するORMの役割

NHibernate のような ORM フレームワークは、SQL 文ではなくオブジェクトとそのプロパティの観点からデータを操作することで、開発者がリレーショナルデータベースとの相互作用を簡素化できるようにします。 この抽象化により、開発者は基礎となるSQLコマンドやデータベーススキーマにあまり注意を払わずに、アプリケーションのビジネスロジックにもっと集中できるようになります。 たとえば、NHibernateはすべてのSQL生成と実行を処理し、挿入、削除、および更新の操作をシンプルなオブジェクト変換とオブジェクト操作で行えるようにします。

.NETプロジェクトにおけるNHibernateの設定

.NETプロジェクトでNHibernateを始めるには、最初のステップとしてNHibernateパッケージをインストールします。 これを簡単に行うには、Visual Studio の NuGet パッケージ マネージャーを使用して、次のコマンドを実行します:

Install-Package IronPdf

NHibernate C#(開発者向けの使い方):図2 - コマンドラインコンソールを開き、上記のコマンドを入力してNHibernateをインストールします。

XML設定ファイルでNHibernateを構成する

NHibernateがインストールされたら、次のステップはそれを構成することです。 これは、データベースサーバーの設定およびオブジェクトとデータベーステーブルとのマッピングの詳細を記載したHibernateマッピングファイルを作成することを含みます。 主なXMLファイルは通常 hibernate.cfg.xmlと命名され、データベース接続文字列、方言、およびその他のデータベース固有の設定などが含まれます。

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
  <session-factory>
    <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
    <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
    <property name="connection.connection_string">
      Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;
    </property>
    <property name="dialect">NHibernate.Dialect.MsSql2012Dialect</property>
    <property name="show_sql">true</property>
    <mapping resource="Employee.hbm.xml"/>
  </session-factory>
</hibernate-configuration>
XML

NHibernateのコアコンポーネントの理解

NHibernateの重要なコンポーネントの1つは、ファクトリデザインパターンを使用して設計されたセッションファクトリです。 このコンポーネントは、データベースへの接続を管理し、トランザクション操作を保持するセッションオブジェクトを作成します。 セッションファクトリは作成するのに高コストであるため、通常はアプリケーションのライフタイムごとに一度だけ作成されます。したがって、パフォーマンスの最適化において重要な要素となります。

NHibernateの主要なクラスとメソッド

NHibernateは、いくつかの基本的なクラスとメソッドを中心に展開されます。 例えば、ISessionインターフェイスはNHibernateにおいて基本的な役割を果たし、データのクエリや操作セッションの作成を容易にします。 以下のようなメソッドは、開発者がトランザクションを開始し、SQLコマンドを実行し、SQLステートメントまたはNHibernateの独自のHQLを使用してデータベースをクエリするのに役立ちます: OpenSession (Hibernateクエリ言語).

NHibernateを使用したエンティティのデータベーステーブルへのマッピング

NHibernateにおけるエンティティマッピングは、通常XMLで記述されたマッピングファイルを通じて行われます。 これらのファイルは、しばしばエンティティクラスの名前にちなんで名付けられます。 (例:Employee.hbm.xml)、エンティティのプロパティがデータベーステーブルの列にどのようにマッピングされるかを定義します。 一般的なマッピングファイルには、クラス名、テーブル名、および各プロパティの詳細(プライマリキー、カラム名、データ型を含む)が含まれます。

マッピングファイルで使用されるプロパティと属性の詳細説明

これらのマッピングファイルでは、各プロパティに対して、not-null制約や一意制約など、さまざまな属性を指定することができます。 NHibernateは、一対多および多対一のリレーションシップのような複雑なマッピングも可能にし、オブジェクト指向フレームワーク内でリレーショナルデータ構造を表現するための強力なツールセットを提供します。

NHibernateでのSQLコマンドとトランザクションの実行

NHibernateはCRUD操作を簡素化します (作成、読み取り、更新、削除) SQL コマンドの基盤を抽象化することによる操作。 開発者は、ISessionインターフェースが提供するメソッドを使用して、明示的なSQLコードを書かずにこれらの操作を実行できます。 例えば、新しいエンティティをデータベースに追加するには、オブジェクトの新しいインスタンスを作成し、そのプロパティを設定し、ISessionSaveメソッドを使用します。

ITransaction を使用したトランザクションの管理

NHibernateにおけるトランザクションはデータの整合性と一貫性を確保するためにITransactionインターフェースを介して管理されます。 ISessionのBeginTransactionメソッドを使用することで、開発者はすべての操作がデータベースにコミットされる前に正常に完了することを保証し、何か問題が発生した場合はロールバックすることができ、データの安定性を維持することができます。

完全なコード例

この例には、NHibernate の設定およびマッピングファイルのセットアップが含まれており、NHibernate を使用して Create、Read、Update、および Delete 操作を実行する方法を示しています。

using NHibernate;
using NHibernate.Cfg;
using System;
public class Employee
{
    public virtual int Id { get; set; }
    public virtual string FirstName { get; set; }
    public virtual string LastName { get; set; }
}
class Program
{
    private static ISessionFactory sessionFactory;
    static void Main()
    {
        sessionFactory = new Configuration().Configure().BuildSessionFactory();
        CreateEmployee();
        ReadEmployee(1);
        UpdateEmployee(1, "UpdatedName");
        DeleteEmployee(1);
    }
    static void CreateEmployee()
    {
        using (var session = sessionFactory.OpenSession())
        using (var transaction = session.BeginTransaction())
        {
            var newEmployee = new Employee
            {
                FirstName = "Iron",
                LastName = "Software"
            };
            session.Save(newEmployee);
            transaction.Commit();
            Console.WriteLine("Employee created: " + newEmployee.Id);
        }
    }
    static void ReadEmployee(int id)
    {
        using (var session = sessionFactory.OpenSession())
        {
            var employee = session.Get<Employee>(id);
            Console.WriteLine("Read Employee: " + employee.FirstName + " " + employee.LastName);
        }
    }
    static void UpdateEmployee(int id, string newFirstName)
    {
        using (var session = sessionFactory.OpenSession())
        using (var transaction = session.BeginTransaction())
        {
            var employee = session.Get<Employee>(id);
            employee.FirstName = newFirstName;
            session.Update(employee);
            transaction.Commit();
            Console.WriteLine("Employee updated: " + employee.FirstName);
        }
    }
    static void DeleteEmployee(int id)
    {
        using (var session = sessionFactory.OpenSession())
        using (var transaction = session.BeginTransaction())
        {
            var employee = session.Get<Employee>(id);
            session.Delete(employee);
            transaction.Commit();
            Console.WriteLine("Employee deleted");
        }
    }
}
using NHibernate;
using NHibernate.Cfg;
using System;
public class Employee
{
    public virtual int Id { get; set; }
    public virtual string FirstName { get; set; }
    public virtual string LastName { get; set; }
}
class Program
{
    private static ISessionFactory sessionFactory;
    static void Main()
    {
        sessionFactory = new Configuration().Configure().BuildSessionFactory();
        CreateEmployee();
        ReadEmployee(1);
        UpdateEmployee(1, "UpdatedName");
        DeleteEmployee(1);
    }
    static void CreateEmployee()
    {
        using (var session = sessionFactory.OpenSession())
        using (var transaction = session.BeginTransaction())
        {
            var newEmployee = new Employee
            {
                FirstName = "Iron",
                LastName = "Software"
            };
            session.Save(newEmployee);
            transaction.Commit();
            Console.WriteLine("Employee created: " + newEmployee.Id);
        }
    }
    static void ReadEmployee(int id)
    {
        using (var session = sessionFactory.OpenSession())
        {
            var employee = session.Get<Employee>(id);
            Console.WriteLine("Read Employee: " + employee.FirstName + " " + employee.LastName);
        }
    }
    static void UpdateEmployee(int id, string newFirstName)
    {
        using (var session = sessionFactory.OpenSession())
        using (var transaction = session.BeginTransaction())
        {
            var employee = session.Get<Employee>(id);
            employee.FirstName = newFirstName;
            session.Update(employee);
            transaction.Commit();
            Console.WriteLine("Employee updated: " + employee.FirstName);
        }
    }
    static void DeleteEmployee(int id)
    {
        using (var session = sessionFactory.OpenSession())
        using (var transaction = session.BeginTransaction())
        {
            var employee = session.Get<Employee>(id);
            session.Delete(employee);
            transaction.Commit();
            Console.WriteLine("Employee deleted");
        }
    }
}
Imports NHibernate
Imports NHibernate.Cfg
Imports System
Public Class Employee
	Public Overridable Property Id() As Integer
	Public Overridable Property FirstName() As String
	Public Overridable Property LastName() As String
End Class
Friend Class Program
	Private Shared sessionFactory As ISessionFactory
	Shared Sub Main()
		sessionFactory = (New Configuration()).Configure().BuildSessionFactory()
		CreateEmployee()
		ReadEmployee(1)
		UpdateEmployee(1, "UpdatedName")
		DeleteEmployee(1)
	End Sub
	Private Shared Sub CreateEmployee()
		Using session = sessionFactory.OpenSession()
		Using transaction = session.BeginTransaction()
			Dim newEmployee = New Employee With {
				.FirstName = "Iron",
				.LastName = "Software"
			}
			session.Save(newEmployee)
			transaction.Commit()
			Console.WriteLine("Employee created: " & newEmployee.Id)
		End Using
		End Using
	End Sub
	Private Shared Sub ReadEmployee(ByVal id As Integer)
		Using session = sessionFactory.OpenSession()
			Dim employee = session.Get(Of Employee)(id)
			Console.WriteLine("Read Employee: " & employee.FirstName & " " & employee.LastName)
		End Using
	End Sub
	Private Shared Sub UpdateEmployee(ByVal id As Integer, ByVal newFirstName As String)
		Using session = sessionFactory.OpenSession()
		Using transaction = session.BeginTransaction()
			Dim employee = session.Get(Of Employee)(id)
			employee.FirstName = newFirstName
			session.Update(employee)
			transaction.Commit()
			Console.WriteLine("Employee updated: " & employee.FirstName)
		End Using
		End Using
	End Sub
	Private Shared Sub DeleteEmployee(ByVal id As Integer)
		Using session = sessionFactory.OpenSession()
		Using transaction = session.BeginTransaction()
			Dim employee = session.Get(Of Employee)(id)
			session.Delete(employee)
			transaction.Commit()
			Console.WriteLine("Employee deleted")
		End Using
		End Using
	End Sub
End Class
VB   C#

データベースのポータビリティと相互運用性の機能

NHibernateは、データベースのポータビリティを実現するように設計されています。 その方言構成のおかげで、NHibernateはコードベースにほとんど変更を加えることなく、ほとんどのSQLデータベースに適応することができます。 これは、データアクセス層を再構築することなく、SQL ServerからMySQLやOracleに切り替えることができることを意味します。

SQL ServerのようなさまざまなデータベースシステムにNHibernateを適応させる

NHibernateのXML設定ファイルでは、開発者がデータベースシステムに特有のSQL方言を指定することができます。 これにより、NHibernateは、SQLをサポートするほぼすべてのリレーショナルデータベースで簡単に適応できる柔軟なソリューションとなり、アプリケーションを異なるデータベースシステム間で移植可能にします。

IronPDFを使用したNHibernate

NHibernate C#(開発者向けの動作方法):図3 - IronPDFのホームページ

NHibernateとの統合 IronPDF .NET アプリケーションを強化できる強力な組み合わせです。 NHibernateを使用してデータベース操作を管理しながらIronPDFを活用することができます。 PDFドキュメントを生成する データから。 アプリケーションが、PDF形式で生成およびダウンロードする必要がある従業員レポートなどのユーザー固有のドキュメントを提供する必要があるシナリオを考えてみてください。 NHibernate Cはデータベースからのデータ検索プロセスを効率的に管理でき、IronPDFはこれらのデータを適切にフォーマットされたPDFファイルに変換することができます。

IronPDF をインストール

まず、プロジェクトにIronPDFを追加してください。 NuGet パッケージマネージャーを使用して IronPDF パッケージをインストールすることで、それを含めることができます。

Install-Package IronPdf
Install-Package IronPdf
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'Install-Package IronPdf
VB   C#

NHibernate C#(開発者向けの動作原理):図4 - NuGet パッケージ マネージャーを使用して IronPDF をインストール

コード例

アプリケーションにこれを実装する方法を詳しく見ていきましょう。 NHibernateをセットアップし、従業員の詳細などの必要なデータをデータベースから取得した後、PDFドキュメントがどのように表示されるべきかを示すHTMLテンプレートを準備します。 このHTMLテンプレートは、NHibernateから取得したデータで動的に埋めることができます。 例えば、社員向けのレポートを生成する場合、テンプレートには社員の名前、ID、その他の関連する詳細情報のためのプレースホルダーが含まれます。

以下は、NHibernateを使用してデータを取得し、それをIronPDFを使用してPDFに変換するコード例です。

using IronPdf;
using NHibernate;
static void CreateEmployeeReport(int employeeId)
{
    // Open a session to interact with the database
    using (var session = OpenSession())
    {
        // Retrieve the employee object based on the provided ID
        var employee = session.Get<Employee>(employeeId);
        // Create an instance of the HtmlToPdf class from IronPDF
        var renderer = new ChromePdfRenderer();
        // Create the HTML content for the PDF, embedding employee data into the HTML
        var htmlTemplate = $@"
            <html>
            <head>
                <title>Employee Report</title>
            </head>
            <body>
                <h1>Employee Details</h1>
                <p>Name: {employee.FirstName} {employee.LastName}</p>
                <p>ID: {employee.ID}</p>
            </body>
            </html>";
        // Render the HTML string as a PDF document
        var pdf = renderer.RenderHtmlAsPdf(htmlTemplate);
        // Save the generated PDF to a file
        pdf.SaveAs("EmployeeReport.pdf");
    }
}
using IronPdf;
using NHibernate;
static void CreateEmployeeReport(int employeeId)
{
    // Open a session to interact with the database
    using (var session = OpenSession())
    {
        // Retrieve the employee object based on the provided ID
        var employee = session.Get<Employee>(employeeId);
        // Create an instance of the HtmlToPdf class from IronPDF
        var renderer = new ChromePdfRenderer();
        // Create the HTML content for the PDF, embedding employee data into the HTML
        var htmlTemplate = $@"
            <html>
            <head>
                <title>Employee Report</title>
            </head>
            <body>
                <h1>Employee Details</h1>
                <p>Name: {employee.FirstName} {employee.LastName}</p>
                <p>ID: {employee.ID}</p>
            </body>
            </html>";
        // Render the HTML string as a PDF document
        var pdf = renderer.RenderHtmlAsPdf(htmlTemplate);
        // Save the generated PDF to a file
        pdf.SaveAs("EmployeeReport.pdf");
    }
}
Imports IronPdf
Imports NHibernate
Shared Sub CreateEmployeeReport(ByVal employeeId As Integer)
	' Open a session to interact with the database
	Using session = OpenSession()
		' Retrieve the employee object based on the provided ID
		Dim employee = session.Get(Of Employee)(employeeId)
		' Create an instance of the HtmlToPdf class from IronPDF
		Dim renderer = New ChromePdfRenderer()
		' Create the HTML content for the PDF, embedding employee data into the HTML
		Dim htmlTemplate = $"
            <html>
            <head>
                <title>Employee Report</title>
            </head>
            <body>
                <h1>Employee Details</h1>
                <p>Name: {employee.FirstName} {employee.LastName}</p>
                <p>ID: {employee.ID}</p>
            </body>
            </html>"
		' Render the HTML string as a PDF document
		Dim pdf = renderer.RenderHtmlAsPdf(htmlTemplate)
		' Save the generated PDF to a file
		pdf.SaveAs("EmployeeReport.pdf")
	End Using
End Sub
VB   C#

NHibernate C#(開発者向けの動作方法):図5 - 上記コードからの例出力

このコードでは、OpenSession() は、従業員データの取得に使用されるNHibernateセッションを初期化するメソッドです。 IronPDFのChromePdfRendererクラスは、取得したデータで埋められたHTMLテンプレートを取り込み、それをPDFとしてレンダリングします。 このPDFはローカルに保存されていますが、ウェブインターフェースを通じてユーザーに直接ストリーミングすることもできます。

結論

NHibernate C#(開発者向けの仕組み):図6 - IronPDFライセンスページ

このチュートリアルでは、NHibernateが.NETアプリケーションにおけるデータベース操作をどのように簡素化するか、そしてIronPDFとの統合により、動的なPDFドキュメントの生成を可能にし、機能性を向上させる方法を検討しました。 NHibernateは強力なデータ管理ツールを提供し、IronPDFはHTMLテンプレートからデータで埋められたプロフェッショナル品質のPDFを作成する便利な方法を提供します。

IronPDFは次のために利用可能です 無料試用ライセンスは$749から始まり、強力なPDF生成機能をアプリケーションに統合するためのコスト効率の高いソリューションを提供します。 これらのツールを組み合わせることで、データの管理およびドキュメントの作成に関する包括的なソリューションが提供され、企業レベルから小規模プロジェクトに至るまで理想的です。

< 以前
Ocelot .NET (開発者にとっての動作方法)
次へ >
Rebus .NET Coreの例(開発者向けの仕組み)

準備はできましたか? バージョン: 2024.9 新発売

無料のNuGetダウンロード 総ダウンロード数: 10,659,073 View Licenses >