Kontakt

Performante Datenbankschichten mit Dapper in .NET 8 – Praxisbeispiel für robuste Industrie­anwendungen

Performante-Datenbankschichten-mit-Dapper-in-NET-8_Praxisbeispiel-für-robuste-Industrieanwendungen_ChatGPT-Image-10.-Sept.-2025,-22_10_26

Performante Datenbankschichten mit Dapper in .NET 8 – Praxisbeispiel für robuste Industrie­anwendungen

In der Automatisierungstechnik – etwa in der Pharma- oder Medizintechnik – müssen Systeme nicht nur zuverlässig, sondern auch effizient mit großen Datenmengen umgehen können.
Eine häufige Herausforderung: schnelle und saubere Datenbankzugriffe, die in komplexen Projekten wie SCADA-, MES- oder Visualisierungssystemen zum Einsatz kommen.

In diesem Beitrag wird anhand eines Beispiels gezeigt, wie man mit .NET 8 und Dapper eine performante und zugleich wartbare Data-Access-Layer aufbaut – mit Fokus auf Lesbarkeit, Performance und Robustheit.

 

1. Ausgangssituation

Ein Produktionssystem speichert Chargeninformationen in einer SQL-Datenbank.
Ziel: Eine Repository-Methode entwickeln, die eine bestimmte Charge anhand ihrer ID ausliest.

Technologien:

  • .NET 8

  • C#

  • MS SQL Server

  • Dapper als Micro-ORM

2. Das Datenmodell

				
					/// <summary>
/// Represents a production batch entity.
/// </summary>
public class Batch
{
    public int BatchId { get; set; }
    public string ProductCode { get; set; } = string.Empty;
    public DateTime CreatedAt { get; set; }
    public string Status { get; set; } = string.Empty;
}

				
			

3. Repository-Methode mit Dapper

				
					using System.Data;
using Dapper;
using Serilog;

/// <summary>
/// Provides data access methods for batch entities.
/// </summary>
public class BatchRepository
{
    private readonly IDbConnection _connection;
    private readonly ILogger _logger;

    public BatchRepository(IDbConnection connection, ILogger logger)
    {
        _connection = connection;
        _logger = logger;
    }

    /// <summary>
    /// Retrieves a batch record by its ID.
    /// </summary>
    public async Task<Batch?> GetBatchByIdAsync(int batchId)
    {
        const string sql = "SELECT BatchId, ProductCode, CreatedAt, Status FROM Batches WHERE BatchId = @BatchId;";

        try
        {
            return await _connection.QuerySingleOrDefaultAsync<Batch>(sql, new { BatchId = batchId });
        }
        catch (Exception ex)
        {
            _logger.Error(ex, "Error retrieving batch with ID {BatchId}", batchId);
            throw;
        }
    }
}

				
			

4. Best Practices aus der Praxis

  • Saubere Trennung: Business-Logik und Datenbankzugriff klar getrennt

  • Fehlerbehandlung: Exceptions werden geloggt

  • Performance: Dapper ist leichtgewichtig und schnell

  • Lesbarkeit: Klare Abfragen, kein unnötiger Overhead

  • Dokumentation: XML-Kommentare für automatische Doku-Tools

5. Fazit

Mit wenigen Zeilen Code lässt sich eine robuste, wartbare und performante Datenbankschicht implementieren. Gerade in Projekten mit hohen Anforderungen an Sicherheit, Stabilität und Transparenz (Pharma, Medizintechnik, Schienenfahrzeuge) ist dieser Ansatz sehr wertvoll.

👉 Wenn Sie für Ihr Projekt einen spezialisierten Experten für .NET, Datenbanken und Schnittstellenentwicklung suchen:
Lassen Sie uns sprechen – 30 Jahre Erfahrung in der Industrieautomation.


Kostenfrei zur Verfügung gestellt von: Uwe E. Keller, Keller Hard & Software Beratung.