08 - Razor Pages - Scaffolding
Process
- Define all your domain models
- Configure DbContext and ModelBuilder
- Scaffold (generate) crud pages for all domain models
Prerequisites
- Install EF tools
> dotnet tool install --global dotnet-ef - Install needed nuget packages
Microsoft.EntityFrameworkCore.SQLiteMicrosoft.VisualStudio.Web.CodeGeneration.DesignMicrosoft.EntityFrameworkCore.DesignMicrosoft.EntityFrameworkCore.SqlServer - Scaffold and migrate your database
dotnet ef migrations add InitialCreatedotnet ef database update - Install UI scaffolding tool
> dotnet tool install --global dotnet-aspnet-codegenerator
Scaffolding
Scaffold CRUD pages for your models:
info
cd into WebApp directory first!
dotnet aspnet-codegenerator razorpage
-m Person
-dc AppDbContext
-udl
-outDir Pages/Persons
--referenceScriptLibraries
-m- Name of the model class-dc- Data context class-udl- Use default layout-outDir- Where to generate the output--referenceScriptLibraries- Add validation scripts on Edit and Create pages
After scaffolding
danger
Inspect and modify the generated pages to your liking.
This is just the starting point!
Async/await
-
New concept Async/Wait
-
Two ways of looking at parallel work – CPU based vs IO based
- CPU based – hard to implement correctly. Even harder to design correctly
- IO based – framework helps. Async pattern in .net
-
OS Thread generation is expensive and slow!
Method signature and usage
Method signature:
public async Task SomeMethodAsync()<- voidpublic async Task<ReturnType> SomeMethodAsync()
In method body you can now use await on some async method:
var Person = await _context.People.FirstOrDefaultAsync(m => m.PersonId == id);
During runtime
During runtime, when code hits await
- Async call starts to execute
- State machine is created and control is given back to server
- When your data arrives, control returns to the method
Async flow

Entity Framework and Async
- Always await
- DbContext does not support multiple out-of-sync operations. Data corruption can occur.
TODO: Title of the header
Other type of IO operations support parallel workloads:
- Web
- Files
- Image processing
- WCF (XRoad)
Running several task in parallel
- Create and collect many tasks
List<Task<SomeType>> allMyTasks - Use WhenAll
List<SomeType> results = await Task.WhenAll(allMyTasks) - Write wrapper methods if tasks are different