العمل مع قواعد البيانات في C#: PostgreSQL و MongoDB عمليًا
العمل مع قواعد البيانات — إحدى المهام الأساسية لأي مطور backend. في نظام C# (.NET) البيئي، تتوفر للمطور مئات المشغلات (drivers) وأطر ORM، لكن الأكثر طلبًا تبقى أنظمة إدارة قواعد البيانات العلائقية (PostgreSQL) وحلول NoSQL الموجهة للمستندات (MongoDB). في هذه المقالة، سنشرح من خلال أمثلة عملية كيفية الاتصال بكلا القاعدتين، وتنفيذ عمليات CRUD، واختيار الأداة المناسبة لمهمة محددة.
1. PostgreSQL في C#: الاتصال و CRUD عبر Npgsql
للعمل مع PostgreSQL في .NET، تُستخدم المكتبة Npgsql — وهي موفر ADO.NET عالي الأداء. سنقوم بتثبيتها عبر NuGet:
dotnet add package Npgsql1.1. الاتصال بقاعدة البيانات
سلسلة الاتصال لخادم PostgreSQL المحلي تبدو كالتالي:
string connectionString = "Host=localhost;Port=5432;Database=testdb;Username=postgres;Password=your_password";لننشئ فئة مساعدة للعمل مع قاعدة البيانات:
using Npgsql;
public class PostgresService{ private readonly string _connectionString;
public PostgresService(string connectionString) { _connectionString = connectionString; }
public async Task InsertUserAsync(string name, int age) { await using var conn = new NpgsqlConnection(_connectionString); await conn.OpenAsync();
var cmd = new NpgsqlCommand( "INSERT INTO users (name, age) VALUES (@name, @age)", conn); cmd.Parameters.AddWithValue("name", name); cmd.Parameters.AddWithValue("age", age);
await cmd.ExecuteNonQueryAsync(); }
public async Task<List<User>> GetAllUsersAsync() { var users = new List<User>();
await using var conn = new NpgsqlConnection(_connectionString); await conn.OpenAsync();
var cmd = new NpgsqlCommand("SELECT id, name, age FROM users", conn); await using var reader = await cmd.ExecuteReaderAsync();
while (await reader.ReadAsync()) { users.Add(new User { Id = reader.GetInt32(0), Name = reader.GetString(1), Age = reader.GetInt32(2) }); }
return users; }}
public class User{ public int Id { get; set; } public string Name { get; set; } public int Age { get; set; }}1.2. استخدام Entity Framework Core مع PostgreSQL
للعمل الأكثر راحة مع البيانات العلائقية، استخدم ORM Entity Framework Core مع الموفر Npgsql.EntityFrameworkCore.PostgreSQL:
dotnet add package Microsoft.EntityFrameworkCoredotnet add package Npgsql.EntityFrameworkCore.PostgreSQLمثال على النموذج والسياق:
public class User{ public int Id { get; set; } public string Name { get; set; } public int Age { get; set; }}
public class AppDbContext : DbContext{ public DbSet<User> Users { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseNpgsql("Host=localhost;Database=testdb;Username=postgres;Password=your_password"); }}الآن تصبح عمليات CRUD بسيطة:
using (var db = new AppDbContext()){ // Create db.Users.Add(new User { Name = "Alice", Age = 30 }); db.SaveChanges();
// Read var users = db.Users.ToList();
// Update var user = db.Users.First(); user.Age = 31; db.SaveChanges();
// Delete db.Users.Remove(user); db.SaveChanges();}2. MongoDB في C#: العمل مع المستندات عبر المشغل الرسمي
MongoDB — قاعدة بيانات NoSQL موجهة للمستندات،