Marten für C# (.NET): Komplettguide zu Document DB und Event Store mit PostgreSQL
Marten ist eine leistungsstarke Bibliothek für .NET, die PostgreSQL in ein hybrides Datenspeichersystem verwandelt – eine Kombination aus Document Database (Dokumentendatenbank) und Event Store (Ereignisspeicher). Entwickelt vom Team JasperFx, ermöglicht sie Entwicklern, PostgreSQL wie ein NoSQL-System zu nutzen, ohne auf die Vorteile einer relationalen Datenbank verzichten zu müssen.
Warum Marten? In der modernen Softwareentwicklung braucht man oft die Flexibilität von Dokumenten-DBs (wie MongoDB) für komplexe, schwach strukturierte Daten – aber gleichzeitig die Zuverlässigkeit und Transaktionssicherheit relationaler Datenbanken. Marten löst dieses Problem: Es bietet einen LINQ-Provider für JSON-Dokumente in PostgreSQL sowie einen vollwertigen Event Store für Event Sourcing und CQRS-Patterns. Besonders nützlich ist das in Microservices-Architekturen, Audit-Systemen, Finanzanwendungen und allen Projekten, die flexible Datenmodelle mit strenger Konsistenz kombinieren müssen.
Die Bibliothek wird aktiv gewartet und in Produktionsumgebungen eingesetzt. Sie integriert sich nahtlos mit ASP.NET Core und Entity Framework Core (bei Bedarf) und bietet eine umfangreiche API für die Datenverarbeitung. Marten erstellt und aktualisiert automatisch das Datenbankschema, unterstützt Migrationen, Indizes und sogar Volltextsuche. Das macht sie zur idealen Wahl für .NET-Entwickler, die die Leistungsfähigkeit von PostgreSQL nutzen möchten, ohne komplexes SQL schreiben zu müssen.
Installation
Die Installation von Marten erfolgt über den NuGet Package Manager. Führen Sie einen der folgenden Befehle aus:
dotnet add package Marten
Oder über die Package Manager Console:
Install-Package Marten
Für den Event Store sind keine zusätzlichen Pakete nötig – alles ist im Hauptpaket enthalten. Für die Integration mit ASP.NET Core empfiehlt sich zusätzlich:
dotnet add package Marten.AspNetCore
Schnellstart
Ein minimales Arbeitsbeispiel umfasst die Konfiguration der PostgreSQL-Verbindung, die Definition eines Dokuments und die Durchführung von CRUD-Operationen.
using Marten;
using System;
using System.Threading.Tasks;
// 1. Dokument definieren
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. DocumentStore konfigurieren
var store = DocumentStore.For(options =>
{
options.Connection("Host=localhost;Database=marten_db;Username=postgres;Password=password");
options.AutoCreateSchemaObjects = AutoCreate.All; // Automatische Tabellenerstellung
});
// 3. Session für die Arbeit öffnen
using var session = store.LightweightSession();
// 4. Dokument erstellen
var user = new User
{
Id = Guid.NewGuid(),
Name = "Max Mustermann",
Age = 30,
Email = "max@example.com"
};
session.Store(user);
await session.SaveChangesAsync();
// 5. Dokument per ID laden
var loadedUser = await session.LoadAsync<User>(user.Id);
Console.WriteLine($"Geladener Benutzer: {loadedUser.Name}, Alter: {loadedUser.Age}");
// 6. Dokument aktualisieren
loadedUser.Age = 31;
session.Store(loadedUser);
await session.SaveChangesAsync();
// 7. Dokument löschen
session.Delete(loadedUser);
await session.SaveChangesAsync();
Console.WriteLine("Fertig!");
}
}
Dieses Beispiel zeigt die grundlegenden Operationen: Erstellen, Lesen, Aktualisieren und Löschen eines Dokuments. Ma
Auch in der Bibliothek
Elasticsearch-Client für Kotlin: Integration, Beispiele und Möglichkeiten
WebSocket in Rust: Bibliotheken tokio-tungstenite und tungstenite
GraphQL in Go: Vollständiger Leitfaden zu Bibliotheken und Werkzeugen
Autorisierung und Authentifizierung in C# (.NET): Vollständiger Leitfaden
TBB (Intel Threading Building Blocks) für C++: Komplettguide mit Beispielen