ORM لـ C# (.NET): مقارنة وأمثلة
في التطوير الحديث على منصة .NET، نادرًا ما يخلو العمل مع قواعد البيانات من استخدام تعيين الكائنات العلائقية (ORM). تسمح مكتبات ORM للمطورين بالتفاعل مع قواعد البيانات العلائقية من خلال كود موجه للكائنات، مما يلغي الحاجة إلى كتابة استعلامات SQL معقدة يدويًا. في هذه المقالة، سنقارن بين أشهر ثلاثة ORM لـ C#: Entity Framework Core وDapper وLINQ to SQL، وسنقدم أمثلة عملية للاستخدام.
1. Entity Framework Core (EF Core)
EF Core هو ORM حديث ومتعدد المنصات من Microsoft، وهو تطور لـ Entity Framework 6. يدعم العمل مع أنظمة قواعد بيانات مختلفة (SQL Server وPostgreSQL وSQLite وMySQL وغيرها) ويوفر إمكانيات قوية للعمل مع البيانات.
الميزات الرئيسية:
- Code First / Database First — يمكن إنشاء قاعدة بيانات بناءً على الكود أو العكس.
- استعلامات LINQ — تُكتب الاستعلامات بلغة C#، ويقوم EF Core بتحويلها إلى SQL.
- الترحيلات (Migrations) — إدارة تلقائية لمخطط قاعدة البيانات.
- التحميل البطيء (Lazy Loading) — تحميل تلقائي للبيانات المرتبطة.
مثال كود (Code First):
using Microsoft.EntityFrameworkCore;using System.Collections.Generic;
public class User{ public int Id { get; set; } public string Name { get; set; } public string Email { get; set; }}
public class AppDbContext : DbContext{ public DbSet<User> Users { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer("Server=.;Database=MyDb;Trusted_Connection=True;"); }}
// الاستخدامusing (var db = new AppDbContext()){ // إضافة مستخدم var user = new User { Name = "إيفان", Email = "ivan@example.com" }; db.Users.Add(user); db.SaveChanges();
// استعلام عبر LINQ var users = db.Users.Where(u => u.Name.Contains("إيفان")).ToList();}المزايا: أداء عالٍ، وظائف غنية، دعم الترحيلات، مجتمع نشط. العيوب: استهلاك أكبر للذاكرة، تعقيد عند إعداد الاستعلامات المعقدة.
2. Dapper
Dapper هو micro-ORM خفيف الوزن، تم إنشاؤه بواسطة فريق Stack Overflow. لا يوفر تعيينًا كاملاً، لكنه يسمح بتنفيذ استعلامات SQL مباشرة مع تعيين النتائج تلقائيًا إلى كائنات C#.
الميزات الرئيسية:
- أقصى أداء — يُعتبر Dapper من أسرع ORM لـ .NET.
- SQL مباشر — تكتب الاستعلامات بلغة SQL نقية.
- بساطة — لا توجد ترحيلات أو سياقات أو تكوينات معقدة.
مثال كود:
using Dapper;using System.Data.SqlClient;using System.Linq;
public class User{ public int Id { get; set; } public string Name { get; set; } public string Email { get; set; }}
// الاستخدامstring connectionString = "Server=.;Database=MyDb;Trusted_Connection=True;";using (var connection = new SqlConnection(connectionString)){ // تنفيذ استعلام SQL var users = connection.Query<User>("SELECT * FROM Users WHERE Name = @Name", new { Name = "إيفان" }).ToList();
// تنفيذ إجراء مخزن var result = connection.Query<User>("GetUsers", commandType: System.Data.CommandType.StoredProcedure);}المزايا: سرعة عالية، بساطة، استهلاك منخفض للموارد. العيوب: عدم وجود ترحيلات، الحاجة لكتابة SQL يدويًا، عدم وجود تحميل تلقائي للكيانات المرتبطة.
3. LINQ to SQL
أيضاً في المكتبة
توصيات