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
También en la biblioteca
OpenCV C++: Guía completa con ejemplos prácticos
Generación de PDF en C++: resumen de bibliotecas y ejemplos de código
Trabajo con CSV en PHP: lectura, escritura y procesamiento de datos
Trabajo con Kafka en Kotlin: bibliotecas y ejemplos