6. diel - Scaffolding a Entity Framework v ASP.NET Core MVC
V minulej lekcii, Pohľad, middleware a routovanie v ASP.NET Core MVC , sme si do našej prvej webovej aplikácie v ASP.NET Core MVC doplnili pohľad, middleware a routovanie.
V minulej lekcii, Pohľad, middleware a routovanie v ASP.NET Core MVC , sme si upravili předgenerovaný projekt z Visual Studia do podoby osobného blogu. Dnešné C# .NET tutoriál bude nabitý najmodernejšími technológiami, pomocou ktorých vytvoríme behom okamihu administráciu článkov na blogu.
Scaffolding
Webové frameworky sú koncipované tak, aby čo najviac zjednodušili prácu programátora a najmä zredukovali množstvo kódu, ktoré musí napísať. Hoci sa im to darí, tak stále existujú situácie, kde je určité množstvo stereotypného kódu nutné a neexistuje spôsob, akým by ho framework mohol nahradiť.
Chystáme sa programovať administráciu článkov na webe a preto budeme potrebovať nejaký kontrolér, model článku, databázovú tabuľku a 5 pohľadov (výpis, editácia, pridanie, odstránenie, detail). Tieto súčasti aplikácie jednoducho musí obsahovať a nezáleží na tom, v ako geniálnym jazyku ju programujeme. Nemusí je však stereotypne písať programátor, ale môže ich za nás vygenerovať IDE. Tomuto princípu sa hovorí scaffolding (najlepší preklad je asi lešenie, kostra). Visual Studio nám jednoducho předgeneruje databázu, kontrolér a pohľady. Získame tak kostru so základnou funkčnosťou, ktorú len upravíme.
Entity framework
S databázou budeme pracovať pomocou technológie Entity Framework Core, čo je tzv. ORM (objektovo-relačné mapovanie). Databázovej tabuľky sa priamo mapujú na C# triedy, v kóde pracujeme len s objektmi a framework sám na pozadí generuje SQL dotazy. S jazykom MS-SQL vôbec neprídeme do styku a naše aplikácie je 100% objektová. Hoci sa budem snažiť všetko podrobne popisovať, odporučím nováčikom na poli ORM návštevu sekcie Databáza v C# .NET, kde je ORM popísané podrobnejšie.
Code First a Database First prístupy
S Entity Framework môžeme pracovať dvoma spôsobmi. Môžeme vytvoriť C# triedu a EF nám podľa nej automaticky vygeneruje databázovú tabuľku a potrebný kontext. Tomuto prístupu sa hovorí Code First. Druhý spôsob spočíva v založenia databázy, z ktorej nám EF vygeneruje triedy a kontext. Asi vás neprekvapí, že sa druhý prístup volá Database First. Keďže vytvoriť triedu je oveľa jednoduchšie ako vytvoriť databázu, zvolil som pre tutoriál prístup Code-First.
Vytvorenie modelu
Pretože Entity Framework používa určité konvencie a prevádza názvy
tried do množného čísla, budeme aplikáciu písať anglicky, aby názvy
neboli skomolené. Do zložky Models
si teda pridajme novú triedu
Article
. Bude vyzerať takto:
public class Article { public int Id { get; set; } public string Content { get; set; } public string Title { get; set; } public string Description { get; set; } }
Trieda obsahuje niekoľko vlastností, konkrétne:
- id
- obsah
- titulok
- popisok
Môžete si k článku pridať napr. Ešte dátum publikácie a podobne.
Id
musí mať každá entita. Až z kódu vygenerujeme tabuľky,
tak sa stane jej primárnym kľúčom, ktorý bude články jednoznačne
odlišovať aj keby mali potrebné rovnaký titulok.
Rebuild
Aby vedel Entity Framework databázu vygenerovať, musíme projekt rebuildovat, pretože ešte nebol s touto triedou zostavený. To dosiahneme kliknutím pravým na projekt v Solution Exploreri a výberom možnosti Rebuild. Trieda sa tým skompiluje.
Teraz si do zložky Controllers
pridáme nový kontrolér.
Zobrazí sa nám dialóg s výberom scaffolding, kde zvolíme MVC Controller
with views, using Entity Framework.
Ako model zvolíme našu triedu Article
a ako dátový kontext
vyberieme už existujúce kontext aplikácie, v ktorom sú užívatelia a ich
úloha. Ako názov kontroleru ponecháme defaultné
ArticlesController
. Všimnite si, že môžeme aj nastaviť či
chceme používať layout a niekoľko ďalších vecí.
Dialóg potvrdíme.
Bol nám vygenerovaný ArticlesController
s niekoľkými
metódami (akciami). Nájdeme tu akcie:
Index()
- Výpis všetkých článkovDetails()
- Výpis jedného článkuCreate()
- Vytvorenie článkuEdit()
- Editácia článkuDelete()
- Odstránenie článku
Keď sa pozrieme do zložky Views
, nájdeme tu zložku
Articles
a v nej 5 pohľadov pre tieto akcie.
Aplikáciu teraz spustíme a prejdeme na záložku Články. Projekt vám teraz buď zobrazí chybovú hlášku alebo bude fungovať, záleží na verziu jednotlivých nástrojov.
Migrácia
Ak vám stránka Články ukáže chybu, nebola zavolaná databázová
migrácie. V našom prípade to znamená, že sme si síce vytvorili triedu
Article
, ale zatiaľ v databáze neexistuje korešpondujúce
tabuľka. Aby databáza zodpovedala našim modelom, musíme na nej vykonávať
tzv. Migrácie. Vo Visual Studiu vyberte v hornom menu Tools -> nugety
Package Manager -> Package Manager Console. V dolnej časti okna sa vám
otvorí konzola. Tam zadajte príkaz:
Add-Migration Vytvoreni_Clanku
Vytvoreni_Clanku
je názov našej migrácia, môžete zadať aj
akýkoľvek iný. Potvrďte klávesou Enter. Spustenie bude chvíľku
trvať.
Akonáhle migrácia vytvoríme, musíme ich na databázu spustiť. To prevedieme príkazom:
Update-Database
Kedykoľvek vytvoríme nový databázový model, nejaký odstránime alebo zmeníme (napr. Do neho pridáme nejakú vlastnosť, nejakú odstránime a pod.), Vykonáme tento postup. VS za nás aktualizuje databázu aj kontext Entity Framework, aby v ňom boli všetky zmeny premietnuté.
Ak vám aplikácia nefungovala, spustite ju teraz znovu a prejdite na odkaz Články. Vidíme, že administrácia článkov sa vygenerovala automaticky a je plne funkčný. Môžeme si skúsiť pridať nejaký testovací článok:
Zobrazí sa nám v zozname článkov:
A môžeme si ho tiež otvoriť pomocou odkazu Details:
Všimnite si URL adresy:
http://localhost:44311/Articles/Details/1
Prvý parameter označuje názov kontroleru, ktorý sa má spustiť
(ArticlesController
), druhý je názov jeho metódy
(Details()
). V predchádzajúcich aplikáciách sme mali v
kontroleru vždy iba jednu metódu (Index()
) a tá sa spustí
automaticky, keď žiadny parameter nezadáme. Ďalšie parametre v adrese sú
parametre dané akcie (metódy) v kontroleru, tu sa jedná o Id
článku, ktorý zobrazujeme.
O tomto mechanizme, ktorý prevádza URL adresu na volanie metód kontroléra
(routovanie) sme si už v skratke povedali v predchádzajúcich lekciách. Len
pre pripomenutie doplním, že jeho nastavenie môžeme meniť v
Startup.cs
.
Metóda Details()
v ArticlesController
vyzerá
takto:
// GET: Articles/Details/5 public async Task<IActionResult> Details(int? id) { if (id == null) { return NotFound(); } var article = await _context.Article .SingleOrDefaultAsync(m => m.Id == id); if (article == null) { return NotFound(); } return View(article); }
Nullovatelný parameter id
je zapísaný ako obyčajný
parameter metódy. Získanie článku z databázy má na svedomí naozaj len
tento riadok:
var article = await _context.Article.SingleOrDefaultAsync(m => m.Id == id);
Ak ste Entity Framework nepoznali, tak ho teraz asi budete milovať
Databáza je uložená v lokálnom súbore, ale nie v priečinku
projektu, ale vo vašej užívateľskej zložke v
C:\Users\<vaše jméno>
. Môžete sa do nej pozrieť, súbor
s databázou má príponu .mdf
. Toto tiež znamená, že ak
vám niečo nepôjde a budete si chcieť dnes alebo kedykoľvek nabudúce
stiahnuť hotové riešenie pod článkom, databázy v ňom nebude a projekt
nebude fungovať. Po stiahnutí projektu je nutné zavolať príkazy
Add-Migration Nazev_Migrace
a Update-Database
v
Package Manager Console, čím sa vám prázdna databázy pre príslušný
projekt vytvorí. Potom bude stiahnutý projektom iba fungovať
Skúste si prečítať zdrojový kód dnešného riešenia a zopakovať si ešte ako všetko funguje. V budúcej lekcii, Úprava administrácie článkov a editor v ASP.NET Core MVC , začneme scaffoldovaný kód upravovať tak, aby sa články priblížili nejakej našej predstave. Projekt je ako vždy nižšie k stiahnutiu.
Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.
Stiahnuť
Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami
Stiahnuté 394x (4.29 MB)
Aplikácia je vrátane zdrojových kódov v jazyku C#