ライブ環境でテストする
ウォーターマークなしで本番環境でテストしてください。
必要な場所でいつでも動作します。
NHibernateオブジェクトリレーショナルマッピング(Object Relational Mapping)の強力な(ORM (オブジェクト関係マッピング)).NETフレームワークで使用するために設計されたフレームワーク。 それは開発者に、.NETアプリケーションのオブジェクト指向の世界とデータベースのリレーショナルな世界を効率的に結び付ける方法を提供します。 NHibernateを使用することで、データアクセス層を実装するために必要なボイラープレートコードの量を大幅に削減でき、.NETアプリケーションがよりクリーンで保守しやすくなります。
NHibernate のような ORM フレームワークは、SQL 文ではなくオブジェクトとそのプロパティの観点からデータを操作することで、開発者がリレーショナルデータベースとの相互作用を簡素化できるようにします。 この抽象化により、開発者は基礎となるSQLコマンドやデータベーススキーマにあまり注意を払わずに、アプリケーションのビジネスロジックにもっと集中できるようになります。 たとえば、NHibernateはすべてのSQL生成と実行を処理し、挿入、削除、および更新の操作をシンプルなオブジェクト変換とオブジェクト操作で行えるようにします。
.NETプロジェクトでNHibernateを始めるには、最初のステップとしてNHibernateパッケージをインストールします。 これを簡単に行うには、Visual Studio の NuGet パッケージ マネージャーを使用して、次のコマンドを実行します:
Install-Package IronPdf
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>
NHibernateの重要なコンポーネントの1つは、ファクトリデザインパターンを使用して設計されたセッションファクトリです。 このコンポーネントは、データベースへの接続を管理し、トランザクション操作を保持するセッションオブジェクトを作成します。 セッションファクトリは作成するのに高コストであるため、通常はアプリケーションのライフタイムごとに一度だけ作成されます。したがって、パフォーマンスの最適化において重要な要素となります。
NHibernateは、いくつかの基本的なクラスとメソッドを中心に展開されます。 例えば、ISession
インターフェイスはNHibernateにおいて基本的な役割を果たし、データのクエリや操作セッションの作成を容易にします。 以下のようなメソッドは、開発者がトランザクションを開始し、SQLコマンドを実行し、SQLステートメントまたはNHibernateの独自のHQLを使用してデータベースをクエリするのに役立ちます:
OpenSession
(Hibernateクエリ言語).
NHibernateにおけるエンティティマッピングは、通常XMLで記述されたマッピングファイルを通じて行われます。 これらのファイルは、しばしばエンティティクラスの名前にちなんで名付けられます。(例:Employee.hbm.xml)、エンティティのプロパティがデータベーステーブルの列にどのようにマッピングされるかを定義します。 一般的なマッピングファイルには、クラス名、テーブル名、および各プロパティの詳細(プライマリキー、カラム名、データ型を含む)が含まれます。
これらのマッピングファイルでは、各プロパティに対して、not-null制約や一意制約など、さまざまな属性を指定することができます。 NHibernateは、一対多および多対一のリレーションシップのような複雑なマッピングも可能にし、オブジェクト指向フレームワーク内でリレーショナルデータ構造を表現するための強力なツールセットを提供します。
NHibernateはCRUD操作を簡素化します(作成、読み取り、更新、削除)SQL コマンドの基盤を抽象化することによる操作。 開発者は、ISession
インターフェースが提供するメソッドを使用して、明示的なSQLコードを書かずにこれらの操作を実行できます。 例えば、新しいエンティティをデータベースに追加するには、オブジェクトの新しいインスタンスを作成し、そのプロパティを設定し、ISession
のSave
メソッドを使用します。
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
NHibernateは、データベースのポータビリティを実現するように設計されています。 その方言構成のおかげで、NHibernateはコードベースにほとんど変更を加えることなく、ほとんどのSQLデータベースに適応することができます。 これは、データアクセス層を再構築することなく、SQL ServerからMySQLやOracleに切り替えることができることを意味します。
NHibernateのXML設定ファイルでは、開発者がデータベースシステムに特有のSQL方言を指定することができます。 これにより、NHibernateは、SQLをサポートするほぼすべてのリレーショナルデータベースで簡単に適応できる柔軟なソリューションとなり、アプリケーションを異なるデータベースシステム間で移植可能にします。
NHibernateとの統合IronPDF.NET アプリケーションを強化できる強力な組み合わせです。 NHibernateを使用してデータベース操作を管理しながらIronPDFを活用することができます。PDFドキュメントを生成するデータから。 アプリケーションが、PDF形式で生成およびダウンロードする必要がある従業員レポートなどのユーザー固有のドキュメントを提供する必要があるシナリオを考えてみてください。 NHibernate Cはデータベースからのデータ検索プロセスを効率的に管理でき、IronPDFはこれらのデータを適切にフォーマットされたPDFファイルに変換することができます。
まず、プロジェクトにIronPDFを追加してください。 NuGet パッケージマネージャーを使用して IronPDF パッケージをインストールすることで、それを含めることができます。
Install-Package IronPdf
Install-Package IronPdf
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'Install-Package 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
このコードでは、OpenSession()
は、従業員データの取得に使用されるNHibernateセッションを初期化するメソッドです。 IronPDFのChromePdfRenderer
クラスは、取得したデータで埋められたHTMLテンプレートを取り込み、それをPDFとしてレンダリングします。 このPDFはローカルに保存されていますが、ウェブインターフェースを通じてユーザーに直接ストリーミングすることもできます。
このチュートリアルでは、NHibernateが.NETアプリケーションにおけるデータベース操作をどのように簡素化するか、そしてIronPDFとの統合により、動的なPDFドキュメントの生成を可能にし、機能性を向上させる方法を検討しました。 NHibernateは強力なデータ管理ツールを提供し、IronPDFはHTMLテンプレートからデータで埋められたプロフェッショナル品質のPDFを作成する便利な方法を提供します。
IronPDFは次のために利用可能です無料試用ライセンスは$749から始まり、強力なPDF生成機能をアプリケーションに統合するためのコスト効率の高いソリューションを提供します。 これらのツールを組み合わせることで、データの管理およびドキュメントの作成に関する包括的なソリューションが提供され、企業レベルから小規模プロジェクトに至るまで理想的です。
9つの .NET API製品 オフィス文書用