ORM لـ C# (.NET): مقارنة وأمثلة استخدام

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

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

ابدأ الدورة

ORM لـ C# (.NET): نظرة عامة ومقارنة وأمثلة



Object-Relational Mapping (ORM) هي تقنية تتيح للمطورين العمل مع قواعد البيانات من خلال كود موجه للكائنات، مع التجريد من استعلامات SQL. في نظام .NET البيئي، توجد العديد من مكتبات ORM الشائعة، لكل منها نقاط قوة وضعف. في هذه المقالة، سنستعرض ثلاث أدوات رئيسية: Entity Framework Core و Dapper و NHibernate، ونقارن أداءها وسهولة استخدامها ونقدم أمثلة عملية على كود C#.



1. Entity Framework Core (EF Core)

EF Core هو ORM الرسمي من Microsoft، وهو خليفة Entity Framework 6. يدعم نهج Code First و Database First و Model First، كما يوفر مزود LINQ قوي لبناء الاستعلامات.



المزايا:

  • تجريد عالي - الحد الأدنى من كود SQL.
  • الترحيل التلقائي وإدارة مخطط قاعدة البيانات.
  • دعم العديد من المزودين (SQL Server, PostgreSQL, SQLite, MySQL).
  • تكامل عميق مع ASP.NET Core.


العيوب:

  • أداء منخفض في الاستعلامات المعقدة.
  • استهلاك كبير للذاكرة عند تحميل البيانات المرتبطة.


مثال كود:

// نموذجpublic class Product{    public int Id { get; set; }    public string Name { get; set; }    public decimal Price { get; set; }}

// سياقpublic class AppDbContext : DbContext{ public DbSet<Product> Products { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder options) => options.UseSqlServer("YourConnectionString");}

// الاستخدامusing var db = new AppDbContext();var cheapProducts = db.Products .Where(p => p.Price < 100) .OrderBy(p => p.Name) .ToList();


2. Dapper

Dapper هو ORM صغير الحجم، تم إنشاؤه بواسطة فريق Stack Overflow. يقوم بتوسيع IDbConnection بطرق امتداد ويعمل بأقرب ما يمكن إلى ADO.NET، مما يوفر أداءً عالياً.



المزايا:

  • سريع للغاية - تقريباً مثل ADO.NET النقي.
  • استهلاك ضئيل للذاكرة.
  • تحكم كامل في استعلامات SQL.
  • مناسب للأنظمة عالية التحميل.


العيوب:

  • لا يوجد توليد تلقائي لمخطط قاعدة البيانات.
  • الحاجة لكتابة استعلامات SQL يدوياً.
  • عدم وجود تتبع للتغييرات (Change Tracking).


مثال كود:

using (var connection = new SqlConnection("YourConnectionString")){    var products = connection.Query<Product>(        "SELECT * FROM Products WHERE Price < @Price ORDER BY Name",        new { Price = 100 });        // نتائج متعددة    using (var multi = connection.QueryMultiple("SELECT * FROM Products; SELECT * FROM Categories"))    {        var prods = multi.Read<Product>();        var cats = multi.Read<Category>();    }}


3. NHibernate

NHibernate هو نسخة من إطار Java الشهير Hibernate. يوفر تنفيذاً كاملاً لنهج مشابه لـ JPA مع تخزين مؤقت قوي ودعم للتسلسلات الهرمية المعقدة للوراثة.



المزايا:

  • نظام تخزين مؤقت متطور (المستوى الأول والثاني).
  • دعم التحميل البطيء (Lazy Loading) و HQL (Hibernate Query Language).
  • إعداد مرن للتعيين عبر XML أو Fluent API.
  • مناسب للمشاريع القديمة (legacy).


العيوب:

  • إعداد معقد ومنحنى تعلم حاد.
  • أبطأ من Dapper و EF Core في الاستعلامات البسيطة.
  • نادراً ما يتم تحديثه مقارنة بـ EF Core.


مثال كود:

توصيات