Oktober 10, 2021

ASP.Net Core 6.0.0-rc.1 mit identity auf PostgreSQL

ASP.Net Core 6.0.0-rc.1 mit identity auf PostgreSQL
Photo by Caspar Camille Rubin / Unsplash

Seit einiger Zeit werden meine Projekte hauptsächlich mit OpenSource komponenten erstellt. Daher wurde es nun Zeit diesen Schritt auch für die .Net Core Webanwendungen umzusetzen.
Das ist grundsätzlich auch kein großes Problem, dennoch findet man online immer wieder die gleichen Fragen gerade wenn es dann um neuere .Net Core Versionen geht.

PostgreSQL vorbereitung/voraussetzung

Wir gehen in diesem Post davon aus das ihr einen PostgreSQL auf localhost mit Port 5432 bereits am laufen habt. (Sollte das nicht der Fall sein kommt hier in kürze ein kleiner Post in dem wir mittels Docker einen kleinen aber feinen PostgreSQL lokal einrichten.)
Die Datenbank und Login-Informationen zur PostgreSQL sollten dabei wie folgt konfiguriert werden.

Database Name:   appDb
Database User: appUser
Database Password: appPassword

Denkt bitte unbedingt daran, wenn eure App dann einmal produktiv gesetzt wird diese Daten UNBEDINGT auf sichere Zugangsdaten zu ändern.


VisualStudio Projekt erstellen

Wir können nun wie gewohnt ein neues VisualStudio Projekt mit dem Template "ASP.NET Core-Web-App (Model View Controller)" anlegen.

VisualStudio Projektanpassungen zur verwendung von PostgreSQL

Folgende NuGet-Packages müssen im Projekt ergänzt werden:

Microsoft.DotNet.Scaffolding.Shared (Version: 6.0.0-rc.1)
Microsoft.VisualStudio.Web.CodeGeneration.Design (Version: 6.0.0-rc.1)
Npgsql.EntityFrameworkCore.PostgreSQL (Version: 6.0.0-rc.1)

nachdem dies erledigt wurde, müssen die folgenden Code-Stellen überarbeitet werden:

appsettings.json

"ConnectionStrings": {
    "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=aspnet-NetCore6MvcIdentity_Demo-072098BD-1EB9-4596-9CF9-723CEC73B964;Trusted_Connection=True;MultipleActiveResultSets=true"
  },
ConnectionStrings vor Änderung zu PostgreSQL
"ConnectionStrings": {
    "DefaultConnection": "Server=localhost;Port=5432;Database=appDb;User Id=appUser;Password=appPassword;"
  },
ConnectionStrings nach Änderung zu PostgreSQL

Program.cs

var connectionString = builder.Configuration.GetConnectionString("DefaultConnection");
builder.Services.AddDbContext<ApplicationDbContext>(options =>
    options.UseSqlServer(connectionString));
builder.Services.AddDbContext() vor Änderung
//var connectionString = builder.Configuration.GetConnectionString("DefaultConnection");
builder.Services.AddDbContext<ApplicationDbContext>(
    options => options.UseNpgsql(
        builder.Configuration.GetConnectionString("DefaultConnection")
        ));
builder.Services.AddDbContext() nach Änderung

Ab hier müssen wir uns eigentlich nicht mehr mit den Änderungen im Coding herumschlagen, wir können hier einfach auf die Features des "EF's" zuürckgreifen.
Durch das EntityFirst Modell können wir die bestehenden Migrations einfach verwerfen un über das EF-Core-PostrgeSQL Paket eine neue Migration anlegen lassen.

Dazu müssen folgende Commands in der Paket-Manager-Konsole ausgeführt werden:

dotnet ef database update 0
dotnet ef migrations remove
dotnet ef migrations add CreateIdentitySchema
dotnet ef database update

Durch ausführung dieser Commands wird die bisherige Migration (MSSQL Migration) entfernt und eine neue Migration mittels PostgreSQL Paket neu aufgebaut.

Danach kann die Web-App mit PostgreSQL weiterentwickelt und beliebig deployed werden.

Natürlich könnt ihr euch den Source-Code zum Beitrag hier downloaden:

GitHub - datahub-at/NetCore6MvcIdentity-Demo
Contribute to datahub-at/NetCore6MvcIdentity-Demo development by creating an account on GitHub.

Lasst es uns wissen solltet ihr bei einem der Schritte hängen bleiben oder etwas nicht wie erwartet klappen.