Marten para C# (.NET): guia completo com exemplos práticos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Marten para C# (.NET): Guia Completo de Document DB e Event Store no PostgreSQL

Marten é uma biblioteca poderosa para .NET que transforma o PostgreSQL em um armazenamento de dados híbrido, combinando os recursos de um Document Database (banco de dados documental) e um Event Store (armazenamento de eventos). Desenvolvida pela equipe JasperFx, ela permite que desenvolvedores trabalhem com PostgreSQL como se fosse um sistema NoSQL, mantendo todas as vantagens de um banco de dados relacional.

Por que usar Marten? No desenvolvimento moderno, muitas vezes precisamos da flexibilidade de bancos documentais (como MongoDB) para armazenar dados complexos e semiestruturados, ao mesmo tempo que exigimos a confiabilidade e transactionalidade de bancos relacionais. Marten resolve esse problema fornecendo um provedor LINQ para trabalhar com documentos JSON armazenados no PostgreSQL, além de um Event Store completo para implementar os padrões Event Sourcing e CQRS. Isso é especialmente útil em arquiteturas de microsserviços, sistemas de auditoria, aplicações financeiras e qualquer projeto que precise combinar flexibilidade de esquema com consistência rigorosa.

A biblioteca é ativamente mantida e usada em projetos em produção. Ela se integra com ASP.NET Core, Entity Framework Core (quando necessário) e oferece uma API rica para manipulação de dados. Marten cria e atualiza automaticamente o esquema do banco de dados, suporta migrações, índices e até busca em texto completo. Isso a torna uma excelente escolha para desenvolvedores .NET que desejam usar o poder do PostgreSQL sem escrever código SQL complexo.

Instalação

A instalação do Marten é feita através do NuGet Package Manager. Execute um dos seguintes comandos:

dotnet add package Marten

ou pelo Package Manager Console:

Install-Package Marten

Para trabalhar com Event Store, não são necessários pacotes adicionais — tudo já está incluído no pacote principal. Recomenda-se também instalar o Marten.AspNetCore para integração com ASP.NET Core:

dotnet add package Marten.AspNetCore

Início Rápido

Um exemplo mínimo funcional inclui configurar a conexão com PostgreSQL, definir um documento e realizar operações CRUD.

using Marten;
using System;
using System.Threading.Tasks;

// 1. Definindo o documento
public class Usuario
{
    public Guid Id { get; set; }
    public string Nome { get; set; }
    public int Idade { get; set; }
    public string Email { get; set; }
}

class Program
{
    static async Task Main(string[] args)
    {
        // 2. Configurando o DocumentStore
        var store = DocumentStore.For(options =>
        {
            options.Connection("Host=localhost;Database=marten_db;Username=postgres;Password=senha");
            options.AutoCreateSchemaObjects = AutoCreate.All; // Criação automática de tabelas
        });

        // 3. Abrindo uma sessão para trabalhar
        using var session = store.LightweightSession();

        // 4. Criando um documento
        var usuario = new Usuario
        {
            Id = Guid.NewGuid(),
            Nome = "João Silva",
            Idade = 30,
            Email = "joao@exemplo.com"
        };

        session.Store(usuario);
        await session.SaveChangesAsync();

        // 5. Carregando o documento pelo ID
        var usuarioCarregado = await session.LoadAsync<Usuario>(usuario.Id);
        Console.WriteLine($"Usuário carregado: {usuarioCarregado.Nome}, idade: {usuarioCarregado.Idade}");

        // 6. Atualizando o documento
        usuarioCarregado.Idade = 31;
        session.Store(usuarioCarregado);
        await session.SaveChangesAsync();

        // 7. Excluindo o documento
        session.Delete(usuarioCarregado);
        await session.SaveChangesAsync();

        Console.WriteLine("Pronto!");
    }
}

Este exemplo demonstra as operações básicas: criar, ler, atualizar e excluir um documento. Marten gerencia automaticamente a serialização para JSON e a criação das tabelas no PostgreSQL.

Recommendations