Permalänk

Hur scaffoldar du i C#.NET?

Tjo! Jag sitter här smått "panikslagen" men jag kommer att klara mig igenom det (har till och med 17:e mars 2024 på mig). Vad som lamslår mig för tillfället är användningen av "scaffolding" inom C#.NET när ASP.NET MVC Core-projekt ska skapas. Jag har inga problem med att skapa projektet från första början inuti Visual Studio 2022 (välja ASP.NET Core MVC-typ .NET8.0 med "Individual Accounts"-autentisering).

Men sedan så kommer förvirringen: jag ser mappen Areas -> Identity -> Pages -> Account men inga filer inuti här. Det är i denna mapp där det ska finnas Razor-undersidor för att kunna Registrera & Logga in, men filerna finns inte. Men när jag kör kommandot "dotnet run" så verkar den ändå kunna få fram dessa undersidor i webbläsaren såväl som dess funktionalitet att registrera och logga in.

Jag förstår inte varför dessa grundläggande filer inte finns synliga i "Solution Explorer" inuti Visual Studio 2022? (även i Models-mappen saknas en fil som skulle utgöra startklassen för en "IdentityUser") Sedan inser jag också att jag vill ha fler tabellkolumner för ett användarkonto och inte enbart e-post och lösenord vilket verkar vara standardutförandet. Jag läser då här: https://learn.microsoft.com/en-us/aspnet/core/security/authen... där jag ska verka scaffolda fram och "override" huvudsakliga filer som då kommer att placeras i Areas -> Identity -> Pages -> Account-mappen?

Vad jag vill göra vilket jag verkar vägledas igenom är att lägga till ett par till tabellkolumner för tabellen som utgör användarkonton i mitt MVC-projekt. Exempelvis ska jag ha en kolumn för "username" och en för "phone". Ett [Attribut] som verkar saknas i C#.NET är det som motsvarar "UNIQUE" i SQL-världen. Ta exempelvis [Required]-attributet vilket motsvarar "NOT NULL" i SQL-världen, men jag hittar inget för "UNIQUE" dock.

Då kommer jag äntligen till rubriken: Det här känns som en riktig omständlig väg att gå, så hur använder Du scaffolding i ditt yrkesliv där C#.NET är ditt huvudsakliga programmeringsspråk? Är det ens så här man ska göra med scaffoldingen eller är det bara massa onödigt "extrajobb" som Microsoft slängt in trots att syftet kanske var att underlätta?😵

Pricken över i:et blir sedan att jag har mer eller mindre noll insikt i hur alla klasser och dess klassmedlemmar i detta drygt 20+ år gamla .NET-bibliotek förhåller sig till varandra. Så när något scaffoldas och man vill ändra något så kan det lätt hänt bli att kompilatorn slår en på fingrarna för att man brutit någon dependency av något slag.

Mvh,
WKL.

Visa signatur

<WKL:"En kodrad i taget!";/>

Permalänk
Medlem

För webb-projekt? Inte, för då blir man ju tvungen att utveckla webb-projekt.

Det är nog den här sidan du letar efter:
https://learn.microsoft.com/en-us/aspnet/core/security/authen...

Och ja, det verkar lite magiskt att man får en massa sidor gratis. Ser inte vid en snabb genomtitt exakt var de injeceras. Men de går att ersätta med egna:

De kolumner du vill lägga till i databasen verkar finnas direkt från mallen, utan att göra något.

Att det inte finns ett attribut för att göra en kolumn unik beror nog på att det är ett minst lika vanligt användningsfall att göra en kombination av kolumner unika tillsammans. Och då måste man börja klabba med att identifiera vilka kolumner som hör ihop genom parametrar till attributet, och någon har väl tyckt att det inte blir vackert.

Lösningen: https://stackoverflow.com/questions/41246614/entity-framework...

Permalänk
Skrivet av KAD:

För webb-projekt? Inte, för då blir man ju tvungen att utveckla webb-projekt.

Det är nog den här sidan du letar efter:
https://learn.microsoft.com/en-us/aspnet/core/security/authen...

Och ja, det verkar lite magiskt att man får en massa sidor gratis. Ser inte vid en snabb genomtitt exakt var de injeceras. Men de går att ersätta med egna:

<Uppladdad bildlänk>

De kolumner du vill lägga till i databasen verkar finnas direkt från mallen, utan att göra något.

<Uppladdad bildlänk>

Att det inte finns ett attribut för att göra en kolumn unik beror nog på att det är ett minst lika vanligt användningsfall att göra en kombination av kolumner unika tillsammans. Och då måste man börja klabba med att identifiera vilka kolumner som hör ihop genom parametrar till attributet, och någon har väl tyckt att det inte blir vackert.

Lösningen: https://stackoverflow.com/questions/41246614/entity-framework...

Tack så mycket för svaret på min luddiga fråga!

Det jag inte förstår är vad tanken är med att "dölja" kod bakom färdiggenererade DLL-filer i C#.NET-utvecklingsmiljön? IDE:n i sig är ju tänkt att vara "code level" och inte på "low code level" med drag & drop precis.

En annan smått frustrerande sak med Microsoft Identity är att i tabellen som du visar i din andra bild så syns klart å tydligt kolumner för "Username" och "normaliserat username" men dessa finns inte med i den scaffoldade koden för registreringen så det blir "oklart" för webbutvecklaren (åtminstone mig) vad som finns med från början och vad som måste läggas till manuellt genom att ärva IdentityUser-klassen. Och jag letar fortfarande efter .CS-filen som skapar användaren (CreateUser()-funktionen) och bestämmer vad för data Username-kolumnen är, för just nu så är det samma som Email (username = email) och detta vill jag ju ändra på.

Möjligen bara jag just nu, men jag tycker att Learn.Microsoft.com är riktigt "hit or miss" vad gäller hjälpen!

Mvh,
WKL.

Visa signatur

<WKL:"En kodrad i taget!";/>