MySQL Connection - SakurAni/Library GitHub Wiki
Für die Verbindung zur MySQL Datenbank wird das Entity Framework Core verwendet. Da es hier jedoch keinen offiziellen Data Provider für MySQL Datenbanken gibt, muss auf Drittanbieter Software zurückgegriffen werden. Verwendet wird daher der MySQL Provider von Pomelo.
Die Weboberfläche zur Datenbank ist über phpmyadmin hier erreichbar.
Konfiguration
Um erfolgreich eine Datenbankverbindung herstellen zu können, benötigt die Anwendung einen so genannten Connection String, welcher in der Datei appsettings.json
wie im folgenden dargestellt abgelegt wird.
"ConnectionString": {
"DefaultConnection": "server=urlOrIpAdress;port=12345;database=DbName;user=UserName;password=password123#"
}
ACHTUNG
Die appsettings.json
Datei darf nie in das Repository eingecheckt werden, da sich hierin sensible Daten befinden! Sie ist daher per .gitignore
ausgeschlossen, es sollte aber dennoch immer darauf geachtet werden! Die Konfigurationsdatei muss daher in jeder Arbeitskopie manuell angelegt oder angepasst werden.
Implementierung
Zur Verwendung der Datenbank innerhalb der API wird die Klasse SakurAniLibContext
verwendet. Diese kann über using SakurAni_Lib.Models
in allen Controllerklassen verwendet werden. Hierfür muss der Klasse beim erzeugen einer neuen Instanz der Connectionstring aus der obigen Konfigurationsdatei übergeben werden, wodurch die eigentliche Datenbank von der Schnittstelle im Code entkoppelt wird.
using (var db = new SakurAniLibContext(this.ConnectionString))
{
// access database layer
}
INFORMATION
Das Abrufen des Connectionstrings übernimmt die Methode GetConnectionstring() aus der Utils Klasse. Hierfür muss der Helper Namespace per using SakurAni_Lib.Helper;
eingebunden werden, anschließend kann der Connectionstring folgendermaßen aus der Konfigurationsdatei gelesen werden:
using SakurAni_Lib.Helper;
namespace SakurAni_Lib.Controllers {
[Route("api/[controller]")]
public class ExampleController : Controller {
private string ConnectionString { get; set; }
public ExampleController()
{
this.ConnectionString = Utils.GetConnectionString();
}
// Actions
}
}