Einleitung: Warum ein C#-Entwickler PostgreSQL und MongoDB kennen sollte
Moderne C#-(.NET-)Entwicklung kommt selten ohne die Arbeit mit Datenbanken aus. Die Wahl zwischen einem relationalen (SQL) und einem dokumentenorientierten (NoSQL) DBMS hängt von der Projektarchitektur ab. PostgreSQL ist eine leistungsstarke relationale Datenbank mit JSON-Unterstützung, während MongoDB eine flexible Dokumentendatenbank für schnelles Prototyping und Big Data ist. In diesem Artikel behandeln wir die Verbindung und grundlegende Operationen mit beiden Systemen aus C#.
1. Arbeiten mit PostgreSQL in C#
Zur Interaktion mit PostgreSQL in .NET wird der Anbieter Npgsql verwendet. Er unterstützt Entity Framework Core und die direkte Ausführung von SQL-Abfragen.
1.1. Installation und Verbindung
Installieren Sie das NuGet-Paket:
dotnet add package NpgsqlBeispiel für eine Verbindungszeichenfolge:
Host=localhost;Port=5432;Database=mydb;Username=user;Password=pass1.2. CRUD-Operationen mit Npgsql
Erstellen wir eine Tabelle Users und führen grundlegende Operationen aus:
using Npgsql;
var connString = "Host=localhost;Database=testdb;Username=postgres;Password=123";await using var conn = new NpgsqlConnection(connString);await conn.OpenAsync();
// Creating a tablevar createCmd = new NpgsqlCommand(@" CREATE TABLE IF NOT EXISTS Users ( Id SERIAL PRIMARY KEY, Name VARCHAR(100), Age INT )", conn);await createCmd.ExecuteNonQueryAsync();
// Inserting datavar 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();
// Reading datavar readCmd = new NpgsqlCommand("SELECT * FROM Users", conn);var reader = await readCmd.ExecuteReaderAsync();while (await reader.ReadAsync()){ Console.WriteLine($"{reader["Id"]}: {reader["Name"]}, {reader["Age"]} years old");}1.3. Verwenden von Entity Framework Core
Installieren Sie das Paket:
dotnet add package Npgsql.EntityFrameworkCore.PostgreSQLDefinieren Sie das Modell und den Kontext:
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 mit EF Core:
using var db = new AppDbContext();
// Addingdb.Users.Add(new User { Name = "Maria", Age = 25 });await db.SaveChangesAsync();
// Readingvar users = await db.Users.ToListAsync();foreach (var u in users) Console.WriteLine($"{u.Name} - {u.Age}");
// Updatingvar user = await db.Users.FirstAsync(u => u.Name == "Maria");user.Age = 26;await db.SaveChangesAsync();
// Deletingdb.Users.Remove(user);await db.SaveChangesAsync();2. Arbeiten mit MongoDB in C#
MongoDB speichert Daten im BSON-Format (binäres JSON). Für C# wird der Treiber MongoDB.Driver verwendet.
2.1. Installation und Verbindung
Installieren Sie das NuGet-Paket:
dotnet add package MongoDB.DriverVerbinden mit einem lokalen Server:
var client = new MongoClient("mongodb://localhost:27017");var database = client.GetDatabase("testdb");var collection = database.GetCollection<BsonDocument>("users");2.2. CRUD-Operationen
Arbeiten mit Dokumenten über BsonDocument:
// Creating a documentvar doc = new BsonDocument{ { "name", "Ivan" }, { "age", 28 }, { "skills", new BsonArray { "C#", "MongoDB", "Docker" } }};await collection.Insert