ASP.NET Core - Heroes alkalmazás¶
Projekt létrehozása¶
- Visual Studio segítségével
- New Project -> ASP.NET Core Web Application
- Válasszuk ki a Web Application (Model-View-Controller) template-et
- Minden más opcionális lehetőséget hagyjunk a default beállításokon (pl. no authentication)
- dotnet CLI-vel
- Nyissunk egy terminált, hozzunk létre egy új mappát a projektünknek (
mkdir HeroesWeb
) és lépjünk be a mappába (cd HeroesWeb
) - A
dotnet new mvc
parancs segítségével hozzuk létre az ASP.NET Core MVC Web Appunkat - Nyissuk meg Visual Studio Code-ban a projektünk mappáját
#Tipp: Visual Studio Code¶
Amennyiben Visual Studio Code-ot használunk, a következő extension-ök lesznek a segítségünkre:
- C# (Microsoft)
- C# Extensions (jchannon)
- .NET Core Tools
- Auto-Using for C#
Adatbázis létrehozása EF Code First segítségével¶
A következő nuget package-(eke)t adjuk hozzá a projekthez:
- Microsoft.EntityFrameworkCore.Sqlite (2.1.11)
#Tipp: dotnet CLi-vel pl. dotnet add package Microsoft.EntityFrameworkCore.Sqlite --version 2.1.11
Data Annotations¶
.NET-ben lehetőségünk van data annotations használatára (.NET 3.5-től kezdve), amikkel valamilyen extra tulajdonságot, jelentést fűzhetünk osztályokhoz, property-khez attribútumok segítségével. A használatához a System.ComponentModel.DataAnnotations namespace behúzására van szükségünk.
Alapvetően 3 fajtáját különböztetjük meg:
- Validation Attributes: validációs célokra
- Display Attributes: a UI-on való megjelenítéshez
- Modelling Attributes: az osztályok közötti kapcsolatok meghatározására
Használata:
1 2 |
|
Az annotáció mindig az adott osztály/property fölé fog kerülni szögletes zárójelek közé. Egyszerre több megadása is lehetséges külön-külön definiálva.
Model osztályok¶
Első lépésként a model osztályainkat fogjuk létrehozni data annotation hozzáadásával. Adjunk egy új osztályt a Models
mappánkhoz Hero
néven:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
Majd készítsünk egy új model osztályt Item
néven:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
A virtual ReferencedHero segítségével fogjuk a két osztály közötti kapcsolatot meghatározni. Ez a kapcsolat fog külső kulcs segítségével az adatbázistáblák között is megmutatkozni.
DbContext hozzáadása, konfigurálása¶
Hozzunk létre egy Context mappát, és ebbe készítsük el a DbContextünket, EFContext
néven. Az EFContext
osztályunkat származtassuk a DbContext osztályból (using Microsoft.EntityFrameworkCore), és lássuk el Heroes
és Items
property-kkel, amik majd az adatbázis tábláinkat fogják reprezentálni.
Majd írjuk felül az ősosztály OnConfiguring metódusát a következőképpen:
1 2 3 4 |
|
A megadott útvonalra szeretnénk ha kerülne az adatbázisunk (hozzuk létre a DB mappát neki).
Most regisztráljuk a létrehozott DbContextünket, hogy a későbbiekben globálisan bárhonnan használhassuk azt. Ezt a Startup.cs-ben tehetjük meg. Keressük meg a ConfigureServices metódust és adjuk hozzá a következő sort:
1 |
|
Majd a Configure metódushoz adjuk hozzá a következő kódrészletet az app.UseMvc() elé:
1 2 3 4 |
|
EntityFramework Code First Migrations¶
[EntityFramework-ös jegyzet] A megközelítés lényege, hogy először az osztályok kerülnek létrehozásra, majd a keretrendszer létrehozza ezek alapján az SQL táblákat. A kód változását úgynevezett migrációk segítségével lehet követni, ami hasonló egy git commithoz. A modell változása után egy migráció létrehozásával az utolsó pillanatkép óta történt változásokat menti le (pl. átnevezés, új property hozzáadása, törlése, stb).
A migrációk rendelkezni fognak Up és Down metódusokkal, az újonnan létrehozott/hozzáadott/módosított és a törölt változtatások kezelésére. Az egyes migrációkat hozzáadhatjuk és visszavonhatjuk (visszaugorhatunk a korábbi állapotra) az adatbázis sémánkhoz.
Maga a migráció egy automatikus folyamat lesz, az egyes migrációs fájlokat generálni fogjuk a model osztályokban történt változások alapján. Ezt EF6-ban nem tudtuk kipróbálni az sqlite-tal, de a webes projekt alatt (lévén .NET Core lesz alatta) már ki tudjuk próbálni.
Az adatbázis és a táblák létrehozása¶
Most hogy létrehoztuk a model osztályokat és a DbContextünk, a következő lépés, hogy ezek alapján elkészítjük az adatbázisunkat a Code First segítségével. Ehhez migration-t fogunk definiálni. A legelső migration-ünk gondoskodni fog az adatbázisunk és a tábláink létrehozásáról. Minden változtatás után a model osztályainkban, létre fogunk hozni egy új migration-t és frissíteni fogjuk az adatbázist a változtatások alapján.
- Visual Studioban
- nyissunk egy Package Manager Console-t
- hozzuk létre az Inital migrációnkat
InitialCreate
néven a következő paranccsal:Add-Migration InitialCreate
- VS Code-ban
- nyissunk egy terminált
- adjuk ki a
dotnet ef migrations add InitialCreate
parancsot
Ha mindent jól csináltunk létrejött egy Migrations mappa, amiben többek között az InitialCreate migration-ünk is szerepel. Nézzük meg az Up és Down metódusokat.
- Ahhoz, hogy a migration-ünk le is fusson frissítenünk kell az adatbázist ezt Visual Studioban az
update-database
paranccsal, terminálból pedig adotnet ef database update
paranccsal tehetjük meg
Vizsgáljuk meg az így létrehozott adatbázisunk sémáját.
Hero action-ök¶
Add/Create Hero¶
Készítsünk egy HeroesControllert a Controller mappába. A HeroesController származzon a Microsoft.AspNetCore.Mvc.Controller osztályból.
Tipp: usingok, amik kelleni fognak:¶
1 2 3 |
|
Hozzunk létre egy context adattagot.
1 |
|
Készítsük el a megfelelő metódusokat a hős létrehozáshoz. Először egy Create page-re lesz szükségünk egy form-mal amit kitölthetünk az új hősünk adataival. Ehhez szükségünk lesz egy Create (Get) metódusra, ami megjeleníti a megfelelő View page-et a formmal.
1 2 3 4 |
|
Ez a metódus a Heroes/Create.cshtml view-t fogja keresni és megjeleníteni a böngészőben, ezért hozzuk létre a Heroes/Create.cshtml fájlt.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
|
Most írjuk meg a controllerben azt a metódust ami elmenti a Hero-t az adatbázisba a Create gombra kattintva (Post).
1 2 3 4 5 6 7 8 9 10 11 12 |
|
List Heroes¶
Készítsünk egy Index.cshtml-t és egy Index actiont, ami kilistázza az adatbázisban szereplő hőseinket.
1 2 3 4 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
|
Végül rakjuk be a létrehozott oldalainkat a navbar-ba.