IDE:Asp Net Core: Unterschied zwischen den Versionen

Aus ahrensburg.city
Zur Navigation springen Zur Suche springen
// via Wikitext Extension for VSCode
 
(5 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
== Löschen der Datenbank in PostgreSQL ==
== Löschen der Datenbank in PostgreSQL ==
<pre>
<pre>
sudo -u postgres -i
psql -c "GRANT ALL PRIVILEGES ON DATABASE asp TO postgres;"
exit
sudo systemctl restart postgresql
sudo -u postgres -i
sudo -u postgres -i
psql -c "drop database asp;"
psql -c "drop database asp;"
Zeile 10: Zeile 14:
exit;
exit;
</pre>
</pre>
== ASP.NET Core MVC mit Individual-Authentifizierung installieren ==
== ASP.NET Core MVC mit Individual-Authentifizierung installieren ==


Zeile 79: Zeile 84:


Damit wird die Datenbank entsprechend der aktuellen Migration aktualisiert.
Damit wird die Datenbank entsprechend der aktuellen Migration aktualisiert.
==Seed==
<pre>
// Notfall-Admin-Benutzer anlegen (Seed)
if (builder.Configuration.GetValue<bool>("AdminSeed:Enabled"))
{
    using (var scope = app.Services.CreateScope())
    {
        var userManager = scope.ServiceProvider.GetRequiredService<UserManager<IdentityUser>>();
        // Keine Ausgabe der Zugangsdaten im Log
          var adminEmail = Environment.GetEnvironmentVariable("ADMINSEED_EMAIL");
                       
        var adminPassword = Environment.GetEnvironmentVariable("ADMINSEED_PASSWORD");
                           
// ..
        var adminUser = await userManager.FindByEmailAsync(adminEmail);
        if (adminUser == null)
        {
            var user = new IdentityUser { UserName = adminEmail, Email = adminEmail, EmailConfirmed = true };
            var result = await userManager.CreateAsync(user, adminPassword);
            if (result.Succeeded)
            {
                Console.WriteLine("Notfall-Admin wurde angelegt.");
            }
            else
            {
                Console.WriteLine("Fehler beim Anlegen des Notfall-Admins:");
                foreach (var error in result.Errors)
                    Console.WriteLine(error.Description);
            }
        }
        else
        {
            Console.WriteLine("Notfall-Admin existiert bereits.");
        }
    }
}
</pre>
==UmgebungsVariable Nutzen==
<pre>
export ADMINSEED_EMAIL=admin@example.com
export ADMINSEED_PASSWORD=SicheresPasswort123
dotnet run
</pre>

Aktuelle Version vom 11. Juli 2025, 07:08 Uhr

Löschen der Datenbank in PostgreSQL

sudo -u postgres -i
psql -c "GRANT ALL PRIVILEGES ON DATABASE asp TO postgres;"
exit
sudo systemctl restart postgresql
sudo -u postgres -i
psql -c "drop database asp;"

Erstelle neue Datenbank

createdb -E UTF8 -O thorsten asp;
exit;

ASP.NET Core MVC mit Individual-Authentifizierung installieren

Um ein neues ASP.NET Core MVC-Projekt mit Benutzerverwaltung (Individual User Accounts) zu erstellen, führe folgenden Befehl im Terminal aus:

dotnet new mvc --auth Individual -o MeinMvcProjekt
cd MeinMvcProjekt

Dadurch wird ein neues MVC-Projekt mit integrierter Benutzerregistrierung, Anmeldung und Rollenverwaltung erstellt.

PostgreSQL

Um die benötigten Pakete für die Identitätsverwaltung und die Datenbankanbindung zu installieren, führe folgende Befehle aus:

dotnet add package Npgsql.EntityFrameworkCore.PostgreSQL
dotnet add package Microsoft.EntityFrameworkCore.Tools

Das erste Paket integriert die Identitätsverwaltung in Entity Framework Core, das zweite Paket stellt die PostgreSQL-Unterstützung bereit.

Migrationen für die Identitätsdatenbank anwenden

Führe anschließend die Migrationen aus, um die benötigten Tabellen für die Benutzerverwaltung in der Datenbank zu erstellen:

dotnet ef database update

Jetzt ist die Benutzerregistrierung und -anmeldung im Projekt verfügbar.

Migrations löschen in ASP.NET Core

Begründung für das Löschen von Migrationen in ASP.NET Core

Es kann verschiedene Gründe geben, warum man alle Migrationen in einem ASP.NET Core-Projekt löschen möchte:

  • Fehlerhafte Migrationen: Wenn Migrationen fehlerhaft erstellt wurden oder die Datenbankstruktur nicht wie gewünscht abbilden, ist es oft einfacher, alle Migrationen zu löschen und von vorne zu beginnen.
  • Strukturelle Änderungen: Bei grundlegenden Änderungen am Datenmodell (z.B. Umbenennung von Tabellen, Entfernen vieler Entitäten) kann es sinnvoll sein, die Migrationen zurückzusetzen, um eine saubere Ausgangsbasis zu schaffen.
  • Projekt-Neustart: In frühen Entwicklungsphasen, wenn sich das Datenmodell noch häufig ändert, ist das Löschen und Neuerstellen der Migrationen ein gängiger Schritt.
  • Synchronisation mit der Datenbank: Wenn die Datenbank und die Migrationen nicht mehr synchron sind, kann ein Reset helfen, Inkonsistenzen zu beheben.

Beachte, dass beim Löschen der Migrationen alle bisherigen Änderungen verloren gehen. Daher sollte dieser Schritt nur durchgeführt werden, wenn keine produktiven Daten betroffen sind oder ein Backup existiert.


Um alle Migrationen im Ordner Migrations zu löschen, kannst du das folgende Kommando im Terminal ausführen:

rm -rf Migrations

Dadurch wird der gesamte Migrations-Ordner und alle darin enthaltenen Dateien entfernt.

Achtung: Stelle sicher, dass du ein Backup hast, bevor du diesen Befehl ausführst, da alle Migrationen unwiderruflich gelöscht werden.

Um eine neue Migration mit dem Namen InitialCreate zu erstellen, verwende folgenden Befehl im Terminal:

dotnet ef migrations add InitialCreate

Dadurch wird eine neue Migration im Migrations-Ordner angelegt, die die aktuelle Datenbankschema-Änderung beschreibt.

Um die Datenbank auf den neuesten Stand der Migrationen zu bringen, führe folgenden Befehl im Terminal aus:

dotnet ef database update

Damit wird die Datenbank entsprechend der aktuellen Migration aktualisiert.

Seed

// Notfall-Admin-Benutzer anlegen (Seed)
if (builder.Configuration.GetValue<bool>("AdminSeed:Enabled"))
{
    using (var scope = app.Services.CreateScope())
    {
        var userManager = scope.ServiceProvider.GetRequiredService<UserManager<IdentityUser>>();
        // Keine Ausgabe der Zugangsdaten im Log
          var adminEmail = Environment.GetEnvironmentVariable("ADMINSEED_EMAIL"); 
                         
        var adminPassword = Environment.GetEnvironmentVariable("ADMINSEED_PASSWORD"); 
                            
// ..

        var adminUser = await userManager.FindByEmailAsync(adminEmail);
        if (adminUser == null)
        {
            var user = new IdentityUser { UserName = adminEmail, Email = adminEmail, EmailConfirmed = true };
            var result = await userManager.CreateAsync(user, adminPassword);
            if (result.Succeeded)
            {
                Console.WriteLine("Notfall-Admin wurde angelegt.");
            }
            else
            {
                Console.WriteLine("Fehler beim Anlegen des Notfall-Admins:");
                foreach (var error in result.Errors)
                    Console.WriteLine(error.Description);
            }
        }
        else
        {
            Console.WriteLine("Notfall-Admin existiert bereits.");
        }
    }
}

UmgebungsVariable Nutzen

export ADMINSEED_EMAIL=admin@example.com
export ADMINSEED_PASSWORD=SicheresPasswort123
dotnet run