C# .NET Core PostgreSQL Connect – Teil 2
In diesem Tutorial zeige ich wie man die Daten aus einer PostgreSQL Datenbank mit dem Entity Framework in einer ASP.NET Core Applikation als API ausgibt. Basierend auf dem letzten Artikel wird die WeatherForecast Applikation dahingehend angepasst.
C# .NET Core PostgreSQL Connect – Teil 2
In der Microservices Architektur hat jedes Service genau eine spezifische Aufgabe. Für eine Applikation die eine Datenbank nutzt ist ein Datenbank Layer ein solches Service. Dieses kann man auch nach „außen“ sichtbar machen, dann hat man eine Web API über die man Daten aus einer Datenbank abfragen kann. Im letzten Artikel habe ich aus den C# Modellen durch das Entity Framework automatisiert eine Tabelle in einer PostgreSQL Datenbank erstellt. Nun geben wir die dort gespeicherten Daten über eine Web API der Öffentlichkeit preis. Das funktioniert genau wie in der WeatherForecast Beispielanwendung von .NET. Die Daten werden nicht zufällig erstellt, sondern direkt aus der Datenbank ausgeliefert.
Controller
Die Änderungen am Code sind minimal, es muss lediglich der Controller angepasst werden. Das gesamte Projekt findest du wie immer auf meiner GitHub Seite. Der neue Code des Controllers sieht wie folgt aus:
[ApiController] [Route("[controller]")] public class WeatherForecastController : ControllerBase { private readonly MyContext _context; public WeatherForecastController(MyContext context) { _context = context; } [HttpGet] public IEnumerable Get() { var users = _context.Users; return users.ToArray(); } }
Für eine Datenbankabfrage braucht man den Context vom Entity Framework. Genau dieser wird dem Konstruktor des Controllers übergeben. Das funktioniert mit lediglich dieser Änderung, das heißt es muss nirgends das Objekt mit dem Context aufgerufen werden. Wie das funktioniert? Mit dependency injection wird das als Service hinzugefügte EntityFrameworkNpgsql Objekt automatisch dem Controller injiziert. Das ist super praktisch und minimiert den Aufwand bei der Entwicklung.
Daten ausgeben
Der Controller gibt die Daten in der Get() Methode aus. Als Rückgabetyp wurde das IEnumerable Interface angegeben, das bietet eine große Fülle an Möglichkeiten. Die Daten der User Tabelle bekommt man indem man vom Context die DBSet<User> Variable Users abfragt und recht einfach mit einem ToArray() in ein IEnumerable Objekt umwandelt. Startet man das Projekt nun über Visual Studio, dann wird der IIS Express gestartet. Der macht die API über einen zufälligen Port (in meinem Fall 44348) aufrufbar. Ausgabe des Controllers sieht wie folgt aus:
Falls du dort nur zwei eckige Klammern siehst [], dann gibt es noch keine Einträge in der Tabelle. Diese werden wie folgt hinzugefügt:
Über den Port 5555 gelangt man zum pgAdmin Docker Container (Microservice). Nach einem erfolgreichen Login über einen Rechtsklick auf die Tabelle und View/Edit Data werden alle Zeilen ausgegeben. Im Data Output Bereich kann man beliebig neue Zeilen hinzufügen. Erst nach einem Klick auf den Button (4) werden diese Zeilen auch in der Datenbank gespeichert. Ein neuerlicher Aufruf des Webservices gibt diese Daten nun in einem JSON Format aus.
Änderungen
Ich habe in meinem Projekt lediglich die Standard WeartherForecast Applikation abgeändert. Für eine richtige Datenbankschnittstelle wird man dem Controller einen intelligenteren Namen geben. Außerdem muss man sich bei der Konzeption bereits darüber Gedanken machen wer diese Daten abrufen kann. Eventuell will man nicht die gesamte Datenbank über das Service freigeben.
Fazit
Ich habe gezeigt wie man mit dem Entity Framework Core und einer ASP.NET API Applikation Daten aus einer PostgreSQL Datenbank ausgibt. Das Datenbank Layer Microservice ist nun in der Lage Daten von der Datenbank für andere Services oder direkt dem Benutzer zugreifbar zu machen. Im nächsten Artikel zeige ich noch wie man dieses Service als Docker Container verpackt und zusammen mit den Containern für die PostgreSQL Datenbank und dem pgAdmin Administrationsprogramm deployed.
Teil 1 | Teil 2