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
    }
}