دليل NHibernate الشامل لـ C# (.NET): أمثلة وتطبيقات عملية

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

ما هو NHibernate ولماذا تحتاجه؟

NHibernate هي مكتبة قوية وناضجة للتعيين الكائني-العلائقي (ORM) لمنصة .NET، مكتوبة بلغة C#. وهي نسخة منقولة من مكتبة Hibernate الشهيرة في Java. تحل NHibernate المشكلة الأساسية للتباين بين نموذج البيانات الكائني في تطبيق C# الخاص بك ونموذج البيانات العلائقي في قاعدة البيانات (SQL Server, PostgreSQL, MySQL, Oracle وغيرها).

المهمة الأساسية لـ NHibernate هي أتمتة تحويل البيانات بين كائنات C# (POCO — Plain Old CLR Objects) والسجلات في جداول قاعدة البيانات. بدلاً من كتابة مئات الأسطر من أكواد SQL المتكررة لعمليات CRUD (إنشاء، قراءة، تحديث، حذف)، تتعامل مع الكائنات وتترك NHibernate مسؤولية توليد وتنفيذ استعلامات SQL.

لماذا تستخدم NHibernate؟

  • زيادة إنتاجية التطوير: تكتب كودًا أقل، خاصة الكود التكراري للتعامل مع ADO.NET.
  • تقليل الأخطاء: يتم توليد استعلامات SQL تلقائيًا، مما يقلل من خطر الأخطاء النحوية وحقن SQL (عند الاستخدام الصحيح).
  • الاستقلالية عن قاعدة البيانات: يمكنك تغيير نظام إدارة قواعد البيانات (DBMS) بتعديل سلسلة الاتصال ولهجة NHibernate فقط، دون إعادة كتابة منطق الأعمال.
  • إدارة التخزين المؤقت: آليات التخزين المؤقت المدمجة من المستوى الأول والثاني تسرّع أداء التطبيق بشكل كبير.
  • التحميل البطيء (Lazy Loading): يتم تحميل البيانات المرتبطة فقط عند الحاجة إليها، مما يوفر الموارد.
  • لغة استعلام قوية: HQL (Hibernate Query Language) و LINQ to NHibernate تسمحان بكتابة استعلامات آمنة من حيث النوع.

تثبيت NHibernate

يتم توزيع NHibernate عبر NuGet — مدير الحزم لمنصة .NET. التثبيت بسيط جدًا.

عبر وحدة تحكم مدير الحزم (Package Manager Console):

Install-Package NHibernate

عبر .NET CLI (لمشاريع .NET Core / .NET 5+):

dotnet add package NHibernate

حزم إضافية (حسب الحاجة):

  • NHibernate.Caches.CoreMemoryCache — للتخزين المؤقت من المستوى الثاني.
  • System.Data.SqlClient أو Microsoft.Data.SqlClient — للعمل مع SQL Server.
  • Npgsql — للعمل مع PostgreSQL.
  • MySql.Data — للعمل مع MySQL.

بعد التثبيت، ستحتاج إلى إعداد التكوين (عادةً في ملف app.config أو web.config أو appsettings.json) أو عبر التكوين السلس (Fluent Configuration) في الكود.

بداية سريعة مع مثال برمجي

لننظر إلى مثال بسيط للعمل مع NHibernate. لنفترض أن لدينا جدول Products في قاعدة بيانات SQL Server.

1. إنشاء فئة الكيان (Entity):

public class Product
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual decimal Price { get; set; }
}

هام: يجب أن تكون جميع الخصائص virtual — وهذا مطلب من NHibernate لتنفيذ آليات الوكيل (التحميل البطيء، تتبع التغييرات).

2. إنشاء ملف التعيين (Product.hbm.xml):

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                   assembly="YourAssemblyName"
                   namespace="YourNamespace">
    <class name="Product" table="Products">
        <id name="Id" column="ProductId">
            <generator class="native" />
        </id>
        <property name="Name" column="ProductName" length="100" not-null="true" />
        <p                    

توصيات