Introducción: ¿por qué un desarrollador de C# debería conocer PostgreSQL y MongoDB?
El desarrollo moderno en C# (.NET) rara vez prescinde del trabajo con bases de datos. La elección entre un sistema de gestión de bases de datos relacional (SQL) y uno orientado a documentos (NoSQL) depende de la arquitectura del proyecto. PostgreSQL es una potente base relacional con soporte para JSON, mientras que MongoDB es una base documental flexible para prototipos rápidos y Big Data. En este artículo, analizaremos la conexión y las operaciones básicas con ambos sistemas desde C#.
1. Trabajo con PostgreSQL en C#
Para la interacción con PostgreSQL en .NET se utiliza el proveedor Npgsql. Este soporta Entity Framework Core y la ejecución directa de consultas SQL.
1.1. Instalación y conexión
Instale el paquete NuGet:
dotnet add package Npgsql
Ejemplo de cadena de conexión:
Host=localhost;Port=5432;Database=mydb;Username=user;Password=pass
1.2. Operaciones CRUD mediante Npgsql
Creemos la tabla Users y realicemos operaciones básicas:
using Npgsql;
var connString = "Host=localhost;Database=testdb;Username=postgres;Password=123";
await using var conn = new NpgsqlConnection(connString);
await conn.OpenAsync();
// Creación de tabla
var createCmd = new NpgsqlCommand(@"
CREATE TABLE IF NOT EXISTS Users (
Id SERIAL PRIMARY KEY,
Name VARCHAR(100),
Age INT
)", conn);
await createCmd.ExecuteNonQueryAsync();
// Inserción de datos
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();
// Lectura de datos
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"]} años");
}
1.3. Uso de Entity Framework Core
Instale el paquete:
dotnet add package Npgsql.EntityFrameworkCore.PostgreSQL
Defina el modelo y el contexto:
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 mediante EF Core:
using var db = new AppDbContext();
// Adición
db.Users.Add(new User { Name = "Мария", Age = 25 });
await db.SaveChangesAsync();
// Lectura
var users = await db.Users.ToListAsync();
foreach (var u in users)
Console.WriteLine($"{u.Name} - {u.Age}");
// Actualización
var user = await db.Users.FirstAsync(u => u.Name == "Мария");
user.Age = 26;
await db.SaveChangesAsync();
// Eliminación
db.Users.Remove(user);
await db.SaveChangesAsync();
2. Trabajo con MongoDB en C#
MongoDB almacena datos en formato BSON (JSON binario). Para C# se utiliza el driver MongoDB.Driver.
2.1. Instalación y conexión
Instale el paquete NuGet:
dotnet add package MongoDB.Driver
Conexión a un servidor local:
var client = new MongoClient("mongodb://localhost:27017");
var database = client.GetDatabase("testdb");
var collection = database.GetCollection<BsonDocument>("users");
2.2. Operaciones CRUD
Trabajo con documentos mediante BsonDocument:
// Creación de documento
var doc = new BsonDocument
{
{ "name", "Иван" },
{ "age", 28 },
{ "skills", new BsonArray { "C#", "MongoDB", "Docker" } }
};
await collection.Insert
```