مقدمة: لماذا يحتاج مطور C# إلى معرفة PostgreSQL و MongoDB؟
نادراً ما يخلو التطوير الحديث بلغة C# (.NET) من العمل مع قواعد البيانات. يعتمد الاختيار بين نظام إدارة قواعد البيانات العلائقية (SQL) ونظام إدارة قواعد البيانات الموجه للوثائق (NoSQL) على بنية المشروع. PostgreSQL هي قاعدة بيانات علائقية قوية تدعم JSON، بينما MongoDB هي قاعدة بيانات وثائقية مرنة للنماذج الأولية السريعة و Big Data. في هذه المقالة، سنشرح الاتصال والعمليات الأساسية مع كلا النظامين من C#.
1. العمل مع PostgreSQL في C#
للتفاعل مع PostgreSQL في .NET، يُستخدم المزوّد Npgsql. وهو يدعم Entity Framework Core والتنفيذ المباشر لاستعلامات SQL.
1.1. التثبيت والاتصال
قم بتثبيت حزمة NuGet:
dotnet add package Npgsqlمثال على سلسلة الاتصال:
Host=localhost;Port=5432;Database=mydb;Username=user;Password=pass1.2. عمليات CRUD عبر Npgsql
لنقم بإنشاء جدول Users وتنفيذ العمليات الأساسية:
using Npgsql;
var connString = "Host=localhost;Database=testdb;Username=postgres;Password=123";await using var conn = new NpgsqlConnection(connString);await conn.OpenAsync();
// إنشاء الجدولvar createCmd = new NpgsqlCommand(@" CREATE TABLE IF NOT EXISTS Users ( Id SERIAL PRIMARY KEY, Name VARCHAR(100), Age INT )", conn);await createCmd.ExecuteNonQueryAsync();
// إدراج البياناتvar insertCmd = new NpgsqlCommand( "INSERT INTO Users (Name, Age) VALUES (@n, @a)", conn);insertCmd.Parameters.AddWithValue("n", "Алексей");insertCmd.Parameters.AddWithValue("a", 30);await insertCmd.ExecuteNonQueryAsync();
// قراءة البياناتvar readCmd = new NpgsqlCommand("SELECT * FROM Users", conn);var reader = await readCmd.ExecuteReaderAsync();while (await reader.ReadAsync()){ Console.WriteLine($"{reader["Id"]}: {reader["Name"]}, {reader["Age"]} лет");}1.3. استخدام Entity Framework Core
قم بتثبيت الحزمة:
dotnet 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 options) => options.UseNpgsql("Host=localhost;Database=testdb;Username=postgres;Password=123");}عمليات CRUD عبر EF Core:
using var db = new AppDbContext();
// إضافةdb.Users.Add(new User { Name = "Мария", Age = 25 });await db.SaveChangesAsync();
// قراءةvar users = await db.Users.ToListAsync();foreach (var u in users) Console.WriteLine($"{u.Name} - {u.Age}");
// تحديثvar user = await db.Users.FirstAsync(u => u.Name == "Мария");user.Age = 26;await db.SaveChangesAsync();
// حذفdb.Users.Remove(user);await db.SaveChangesAsync();2. العمل مع MongoDB في C#
يخزن MongoDB البيانات بتنسيق BSON (JSON ثنائي). بالنسبة لـ C#، يُستخدم المُشغّل MongoDB.Driver.
2.1. التثبيت والاتصال
قم بتثبيت حزمة NuGet:
dotnet add package MongoDB.Driverالاتصال بالخادم المحلي:
var client = new MongoClient("mongodb://localhost:27017");var database = client.GetDatabase("testdb");var collection = database.GetCollection<BsonDocument>("users");2.2. عمليات CRUD
العمل مع الوثائق عبر BsonDocument:
// إنشاء وثيقةvar doc = new BsonDocument{ { "name", "Иван" }, { "age", 28 }, { "skills", new BsonArray { "C#", "MongoDB", "Docker" } }};await collection.InsertOn