IDE:Asp Net Core: Unterschied zwischen den Versionen
// 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