Marten para C# (.NET): guía completa con ejemplos prácticos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Marten para C# (.NET): Guía completa de Document DB y Event Store en PostgreSQL

Marten es una potente biblioteca para .NET que convierte PostgreSQL en un almacenamiento de datos híbrido, combinando las capacidades de una base de datos documental (Document DB) y un almacén de eventos (Event Store). Desarrollada por el equipo de JasperFx, permite a los desarrolladores trabajar con PostgreSQL como si fuera un sistema similar a NoSQL, conservando al mismo tiempo todas las ventajas de una base de datos relacional.

¿Para qué sirve Marten? En el desarrollo moderno, a menudo se necesita la flexibilidad de las bases de datos documentales (como MongoDB) para almacenar datos complejos y semiestructurados, junto con la fiabilidad y la capacidad transaccional de las bases relacionales. Marten resuelve este problema proporcionando un proveedor LINQ para trabajar con documentos JSON almacenados en PostgreSQL, y un Event Store completo para implementar los patrones Event Sourcing y CQRS. Esto es especialmente útil en arquitecturas de microservicios, sistemas de auditoría, aplicaciones financieras y cualquier proyecto que requiera una combinación de flexibilidad de esquema y consistencia estricta.

La biblioteca cuenta con soporte activo y se utiliza en proyectos en producción. Se integra con ASP.NET Core, Entity Framework Core (si es necesario) y ofrece una API enriquecida para el manejo de datos. Marten crea y actualiza automáticamente el esquema de la base de datos, admite migraciones, índices e incluso búsqueda de texto completo. Esto la convierte en una excelente opción para desarrolladores .NET que quieren aprovechar el poder de PostgreSQL sin escribir código SQL complejo.

Instalación

La instalación de Marten se realiza a través del Administrador de paquetes NuGet. Ejecuta uno de los siguientes comandos:

dotnet add package Marten

o desde la Consola del Administrador de paquetes:

Install-Package Marten

Para trabajar con Event Store no se necesitan paquetes adicionales, todo está incluido en el paquete principal. También se recomienda instalar Marten.AspNetCore para la integración con ASP.NET Core:

dotnet add package Marten.AspNetCore

Inicio rápido

Un ejemplo mínimo funcional incluye la configuración de la conexión a PostgreSQL, la definición de un documento y la realización de operaciones CRUD.

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

// 1. Definimos un documento
public class User
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
    public string Email { get; set; }
}

class Program
{
    static async Task Main(string[] args)
    {
        // 2. Configuramos DocumentStore
        var store = DocumentStore.For(options =>
        {
            options.Connection("Host=localhost;Database=marten_db;Username=postgres;Password=password");
            options.AutoCreateSchemaObjects = AutoCreate.All; // Creación automática de tablas
        });

        // 3. Abrimos una sesión para trabajar
        using var session = store.LightweightSession();

        // 4. Creamos un documento
        var user = new User
        {
            Id = Guid.NewGuid(),
            Name = "Juan Pérez",
            Age = 30,
            Email = "juan@example.com"
        };

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

        // 5. Cargamos el documento por ID
        var loadedUser = await session.LoadAsync<User>(user.Id);
        Console.WriteLine($"Usuario cargado: {loadedUser.Name}, edad: {loadedUser.Age}");

        // 6. Actualizamos el documento
        loadedUser.Age = 31;
        session.Store(loadedUser);
        await session.SaveChangesAsync();

        // 7. Eliminamos el documento
        session.Delete(loadedUser);
        await session.SaveChangesAsync();

        Console.WriteLine("¡Listo!");
    }
}

Este ejemplo muestra las operaciones básicas: crear, leer, actualizar y eliminar un documento. Ma

Recommendations