Travail avec les bases de données en C# : PostgreSQL et MongoDB en pratique
Le travail avec les bases de données est l'une des tâches clés de tout développeur backend. Dans l'écosystème C# (.NET), des centaines de pilotes et d'ORM sont disponibles pour le développeur, mais les plus demandés restent les SGBD relationnels (PostgreSQL) et les solutions NoSQL orientées documents (MongoDB). Dans cet article, nous allons voir, à l'aide d'exemples pratiques, comment se connecter aux deux bases, effectuer des opérations CRUD et choisir l'outil adapté à une tâche spécifique.
1. PostgreSQL en C# : connexion et CRUD via Npgsql
Pour travailler avec PostgreSQL dans .NET, on utilise la bibliothèque Npgsql — un fournisseur ADO.NET haute performance. Installons-la via NuGet :
dotnet add package Npgsql1.1. Connexion à la base de données
La chaîne de connexion pour un serveur PostgreSQL local ressemble à ceci :
string connectionString = "Host=localhost;Port=5432;Database=testdb;Username=postgres;Password=your_password";Créons une classe d'assistance pour travailler avec la BD :
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. Utilisation d'Entity Framework Core avec PostgreSQL
Pour un travail plus pratique avec les données relationnelles, utilisez l'ORM Entity Framework Core avec le fournisseur Npgsql.EntityFrameworkCore.PostgreSQL :
dotnet add package Microsoft.EntityFrameworkCoredotnet add package Npgsql.EntityFrameworkCore.PostgreSQLExemple de modèle et de contexte :
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"); }}Maintenant, les opérations CRUD deviennent triviales :
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 en C# : travail avec les documents via le pilote officiel
MongoDB est une base NoSQL orientée documents,