Introdução: Por que um Desenvolvedor C# Deve Conhecer PostgreSQL e MongoDB
O desenvolvimento moderno em C# (.NET) raramente ocorre sem trabalhar com bancos de dados. A escolha entre um SGBD relacional (SQL) e orientado a documentos (NoSQL) depende da arquitetura do projeto. PostgreSQL é um banco de dados relacional poderoso com suporte a JSON, enquanto MongoDB é um banco de dados de documentos flexível para prototipagem rápida e Big Data. Neste artigo, abordaremos a conexão e operações básicas com ambos os sistemas a partir do C#.
1. Trabalhando com PostgreSQL em C#
Para interagir com PostgreSQL no .NET, utiliza-se o provedor Npgsql. Ele suporta Entity Framework Core e execução direta de consultas SQL.
1.1. Instalação e Conexão
Instale o pacote NuGet:
dotnet add package NpgsqlExemplo de string de conexão:
Host=localhost;Port=5432;Database=mydb;Username=user;Password=pass1.2. Operações CRUD via Npgsql
Vamos criar uma tabela Users e realizar operações básicas:
using Npgsql;
var connString = "Host=localhost;Database=testdb;Username=postgres;Password=123";await using var conn = new NpgsqlConnection(connString);await conn.OpenAsync();
// Criando uma tabelavar createCmd = new NpgsqlCommand(@" CREATE TABLE IF NOT EXISTS Users ( Id SERIAL PRIMARY KEY, Name VARCHAR(100), Age INT )", conn);await createCmd.ExecuteNonQueryAsync();
// Inserindo dadosvar insertCmd = new NpgsqlCommand( "INSERT INTO Users (Name, Age) VALUES (@n, @a)", conn);insertCmd.Parameters.AddWithValue("n", "Alexey");insertCmd.Parameters.AddWithValue("a", 30);await insertCmd.ExecuteNonQueryAsync();
// Lendo dadosvar readCmd = new NpgsqlCommand("SELECT * FROM Users", conn);var reader = await readCmd.ExecuteReaderAsync();while (await reader.ReadAsync()){ Console.WriteLine($"{reader["Id"]}: {reader["Name"]}, {reader["Age"]} anos");}1.3. Usando Entity Framework Core
Instale o pacote:
dotnet add package Npgsql.EntityFrameworkCore.PostgreSQLDefina o modelo e o 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 via EF Core:
using var db = new AppDbContext();
// Adicionandodb.Users.Add(new User { Name = "Maria", Age = 25 });await db.SaveChangesAsync();
// Lendovar users = await db.Users.ToListAsync();foreach (var u in users) Console.WriteLine($"{u.Name} - {u.Age}");
// Atualizandovar user = await db.Users.FirstAsync(u => u.Name == "Maria");user.Age = 26;await db.SaveChangesAsync();
// Deletandodb.Users.Remove(user);await db.SaveChangesAsync();2. Trabalhando com MongoDB em C#
MongoDB armazena dados no formato BSON (JSON binário). O driver MongoDB.Driver é usado para C#.
2.1. Instalação e Conexão
Instale o pacote NuGet:
dotnet add package MongoDB.DriverConectando a um servidor local:
var client = new MongoClient("mongodb://localhost:27017");var database = client.GetDatabase("testdb");var collection = database.GetCollection<BsonDocument>("users");2.2. Operações CRUD
Trabalhando com documentos via BsonDocument:
// Criando um documentovar doc = new BsonDocument{ { "name", "Ivan" }, { "age", 28 }, { "skills", new BsonArray { "C#", "MongoDB", "Docker" } }};await collection.Insert